这个问题我无法理解,为什么,求高人指点,请看代码:var reg=/^(.+?):(.+)$/gi,s='a:a',c,cfg;
alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
c=s.replace(reg,'$1');
alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么?????
if(reg.test(s))cfg=s.replace(reg,'$2');为什么在第一次replace后再测试就为false????

解决方案 »

  1.   

    替换之后,你再输出一下s试试看看是多少。应该是在s的基础上替换,s的值就变了吧。虽然,你又把这个值给了c,但是给c的值应该是你替换之后的s的值。
      

  2.   

    代码中弹出了,格式是reg.test()+reg.source+s;弹出的内容都注释出来了
      

  3.   

    问题是第一次测试是true,第二次却是false……,求内幕
      

  4.   

    要么去掉g,要么 重新complievar reg=/^(.+?):(.+)$/i,s='a:a',c,cfg;
    alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
    //c=s.replace(reg,'$1');
    alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么?????
    //if(reg.test(s))cfg=s.replace(reg,'$2');或者
    var reg=/^(.+?):(.+)$/gi,s='a:a',c,cfg;
    alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
    //c=s.replace(reg,'$1');
    reg.compile()
    alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么?????
    //if(reg.test(s))cfg=s.replace(reg,'$2');
      

  5.   

    高人能否指点一下,我只知道g是全文匹配,为什么要去掉才对?不去掉为什么要重新编译?replace用'$n'的方式修改了正则表达式什么地方?
      

  6.   

    应该和replace没有关系全局匹配,先多第一个a开始,再从第二个a开始。第一个正好符合,为true.第二个不复合,为false.然后就这样循环。一直是true、false、true、false、true、false、true、false、……高手们,我说的对不对?
      

  7.   

    http://blog.csdn.net/cj205/article/details/6161968
      

  8.   

    lastIndex,看我的博客吧 或者查手册
      

  9.   

    LZ是用IE调试的吧?这问题只有ie才有,其跟其他标准浏览器的区别在于replace后ie不会自动把lastIndex置0。解决办法就是手动置0呗。     var reg=/^(.+?):(.+)$/gi,s='a:a',c,cfg;
    alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
    c=s.replace(reg,'$1');
    reg.lastIndex = 0;
    alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么?????
    if(reg.test(s))cfg=s.replace(reg,'$2');
    另外,全局正则表达式对象只有一个,每执行一次正则表达式查找,都会改变这个全局对象的属性值。
      

  10.   

    另外,test最好别用全局表达式