再执行完第一个正则匹配后,必须重新编译下
详见
http://community.csdn.net/Expert/topic/5657/5657972.xml?temp=.1280329

解决方案 »

  1.   

    <script>
    var Ux = ['aa','bb','cc','dd','ee','ff','gg','hh','ii','ab'];
    var re = /^[\s\S]*/gi;
    for (var r = 0; r < Ux.length ;r++ ){ alert(re + '\n'+'"' + Ux[r] + '"\n' + re.test(Ux[r])); // 这里的 re.test 结果为 true
    re.compile();
    alert(re + '\n'+'"' + Ux[r] + '"\n' + re.test(Ux[r])); // 这里的 re.test 结果为 false
    }
    </script>
      

  2.   

    楼上的页面打不开这个不是第一个匹配完的问题吧?如果我只 alert 一次那么 aa 是 true , bb 就是 false ,cc 为 true,dd 为 false<%
    Dim Ux,Re
    Ux = Split("aa,bb,cc,dd,ee,ff",",")
    Set Re = New RegExp
    Re.Pattern = "^[\s\S]*"
    Re.IgnoreCase = True
    Re.Global = True
    For i = 0 To UBound(Ux)
    Response.Write "<li>" & Ux(i)
    Response.Write " : " & Re.Test(Ux(i))
    Response.Write " : " & Re.Test(Ux(i))
    Next
    %>这段 asp 代码运行是正确的,所有结果返回为 true
      

  3.   

    用^ $代替g就可以了http://community.csdn.net/Expert/TopicView3.asp?id=5422907看后面的关于第3点的解释和g与lastIndex有关,
    解决的办法还是上面的:每次调用前在重新编译下
    仔细看看下文
    http://www.chiqiang.com/logs/2006/11/3785992.html
    我把关键的地方烤下来:
    1。 假如你的正则表达式使用了"g"标记,你可以多次使用exec 方法来连续匹配相同的串。当你这样做
    的时候,新的匹配将从由正则表达式的lastIndex 属性值确定的子串中开始。(test一样的方法)2。
    RegExp的属性 在javascript 1.2, NES 3.0以上版本提供 
    描述:lastIndex 是个别的正则表达式对象的属性。 这个属性只有当正则表达式的"g"标记被使用以进行全串匹配的时候才被设置。实行以下规则:
    如果lastIndex大小字符串的长度,regexp.test和regexp.exec失败,且lastIndex被设为0。
    如果lastIndex等于字串的长度且正则表达式匹配空字符串,则正则表达式从lastIndex的位置开始匹配。
    如果lastIndex等于字符串的长度且正则表达式不匹配空字符串,则正则表达式不匹配input,且lastIndex被置为0。
    否则,lastIndex被设置成最近一次匹配的下一点。举例var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
    alert(bbb.test("aaaaaa"))
    alert(bbb.lastIndex)
    //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi 
    alert(bbb.test("中中aa中中"))
    alert(bbb.lastIndex)
    //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
    alert(bbb.test("aaa中aa"))
    alert(bbb.lastIndex)
    这个与上面的区别在于第2个的长度,比6大多了,可以匹配到true
    var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
    alert(bbb.test("aaaaaa"))
    alert(bbb.lastIndex)
    //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
    alert(bbb.test("中中aa中中中中中中"))
    alert(bbb.lastIndex)
    //var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
    alert(bbb.test("aaa中aa"))
    alert(bbb.lastIndex)
    用ie打开
      

  4.   

    re.compile(); 之后, re 的内容变成 /(?:)/ 了?