正确使用JS中的正则
2015-10-23 10:32
211 查看
作者: Laruence( ) 本文地址: http://www.laruence.com/2009/08/09/1036.html 转载请注明出处 yuchen网友发来一个问题, 大体意思就是在JS中, 同样的正则, 同样的字符串, 循环匹配结果却不一样 , <script type='text/javascript'> var reTest = /^aid=(.*)/ig; var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ]; for (var i=0, l=aData.length; i<l; i++) { alert(reTest.test(aData[i])); } </script> 结果却是: true false true false 为什么会这样呢? 这个就和JS中正则对象的lastIndex属性有关了. 定义和用法 lastIndex 属性用于规定下次匹配的起始位置。 语法 Js代码 RegExpObject.lastIndex 说明 该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。 上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。 该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。 提示和注释 重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。 提示:如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0。 So, 原因很明显, 解决方法也很明了了. <script type='text/javascript'> var reTest = /^aid=(.*)/ig; var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ]; for (var i=0, l=aData.length; i<l; i++) { reTest.lastIndex = 0; alert(reTest.test(aData[i])); } </script> 这样, 结果就对了~, 当然 另外, moxie同学说的方法其实更有效, 既然你不需要g, 那何必设置g呢? <script type='text/javascript'> var reTest = /^aid=(.*)/i; var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ]; for (var i=0, l=aData.length; i<l; i++) { alert(reTest.test(aData[i])); } </script> this works well too~
相关文章推荐
- Java简单字符串插值实现
- C# 正则判断一个数字的格式是否有逗号的代码
- C#常用正则大全分享
- php正则替换处理HTML页面的方法
- php的正则处理函数总结分析
- 正则方式的自动小偷抓网程序
- asp 去掉html中的table正则代码函数
- mysqlhotcopy 正则使用小技巧
- js下函数般调用正则的方法附代码
- php实现使用正则将文本中的网址转换成链接标签
- php下正则来匹配dede模板标签的代码
- asp 验证输入网址是否有效并可以访问 与正则验证输入网址
- php 正则 过滤html 的超链接
- JS正则中的RegExp对象对象
- 正则表达式语法
- .NET读取所有目录下文件正则匹配文本电子邮件
- 常用正则 常用的C#正则表达式
- PHP一些常用的正则表达式字符的一些转换
- 去除段首段尾的 和全角的空格的正则
- javascript使用正则获取url上的某个参数