一个奇怪的正则问题 再执行完第一个正则匹配后,必须重新编译下详见http://community.csdn.net/Expert/topic/5657/5657972.xml?temp=.1280329 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <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 结果为 truere.compile(); alert(re + '\n'+'"' + Ux[r] + '"\n' + re.test(Ux[r])); // 这里的 re.test 结果为 false }</script> 楼上的页面打不开这个不是第一个匹配完的问题吧?如果我只 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 用^ $代替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,}/gialert(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,}/gialert(bbb.test("aaa中aa"))alert(bbb.lastIndex)这个与上面的区别在于第2个的长度,比6大多了,可以匹配到truevar bbb=/[a-z\u4e00-\u9fa5]{2,}/gialert(bbb.test("aaaaaa"))alert(bbb.lastIndex)//var bbb=/[a-z\u4e00-\u9fa5]{2,}/gialert(bbb.test("中中aa中中中中中中"))alert(bbb.lastIndex)//var bbb=/[a-z\u4e00-\u9fa5]{2,}/gialert(bbb.test("aaa中aa"))alert(bbb.lastIndex)用ie打开 re.compile(); 之后, re 的内容变成 /(?:)/ 了? 正则表达匹配 弹出列表 定义text 时 小问题 ? 强烈推荐:240多个jQuery插件 求表单验证文本框怎样只能让其输入中文 有一个页面,有一部分是动态添加的(就是靠js添加的),现在我想用NekoHTML 解析这部分,但是做了个试验,解析不出这部分,我想问问有什么办法吗 document.getElementById相关问题 js读取文本? 菜鸟问题!!!关于控制表格的单元格! 能用JavaScript禁止浏览者拷贝网页文本吗? 如何用正则过滤< 和>? 正则表达式?
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>
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
解决的办法还是上面的:每次调用前在重新编译下
仔细看看下文
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打开