<script>
 var txt = "12345678";
 alert(txt.replace(/(?=\d+)(\d{3})/gi, "$1,"));
</script>为什么这个返回的结果是123,456,78呢,这个正则表达式的匹配过程又是怎样?

解决方案 »

  1.   

    怎么我记得(?=)一般是放在后面的,根据我这里的测试,你这个匹配不到任何东西,自动等价于
    <script>
     var txt = "12345678";
     alert(txt.replace(/(\d{3})/g, "$1,"));
    </script>
      

  2.   


    比如这段代码<script>
     var txt = "a123";
     alert(txt.replace(/(?=[a-z])(\d{3})/g, "$1,"));
    </script>按照正则表达式字面上的意思就是匹配三个数字,并且这三个数字前面带有一个小写字母,可是为什么匹配不到任何内容呢?最合理的解释就是"(?=)"不能放在第一位?那么下面一段代码不是又有矛盾了吗? <script>
     var txt = "a123a";
     alert(txt.replace(/[a-z](\d{3})(?=[a-z])/, "$1,"));
     //输出结果是"123,a"
    </script>
    前面的a不知道跑哪去了
      

  3.   

    按照我的理解,(?=a)意思是匹配a这个字符前面的一个位置,比如
    "123a".match(/.*(?=a)/)的结果是 ["123"]
    需求一般是:我知道找一串字符,我只知道这串字符的后面是接着一个"a"的你好像是想要这样:我知道找一串字符,我只知道这串字符的前面是接着一个"a"的
    这时正规的正则是用(?<=)的,但是javascript并不支持这个正则。=============================================var txt = "a123";
     alert(txt.replace(/(?=[a-z])(\d{3})/g, "$1,"));这一段我也不太会解释了============================================== var txt = "a123a";
     alert(txt.replace(/[a-z](\d{3})(?=[a-z])/, "$1,"));
     //输出结果是"123,a"这段就很明显哦,你分了组,$1当然是取第一组(\d{3})了你想有a就这样嘛
     var txt = "a123a";
     alert(txt.replace(/([a-z]\d{3})(?=[a-z])/, "$1,"));
      

  4.   

    刚才把replace搞混了,也只能这样解释了,我没啥需求,只是刚才测试的时候觉得结果很奇怪,呵呵,散分结贴。
    ps:加我QQ,823797837