您现在的位置:首页 --> JavaScript --> 正确使用JS中的正则
正确使用JS中的正则
浏览:1743次 出处信息
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~
建议继续学习:
- 统计最近用过的linux命令 (阅读:5322)
- grep 正则表达式选项要记得转义 (阅读:5186)
- 正则表达式基础 (阅读:5053)
- 正则表达式的与或非 (阅读:4642)
- 学习Grep,Sed中的正则 (阅读:3965)
- URL正则表达式 (阅读:3533)
- PHP 正则里面的两个重要技巧 (阅读:3447)
- 正则表达式简要入门 (阅读:3427)
- 正则转义符汇总 (阅读:3255)
- 正则表达式简介及使用 (阅读:3244)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Javascript作用域原理
后一篇:深入理解Javascript之this关键字 >>
文章信息
- 作者:雪候鸟 来源: 风雪之隅
- 标签: 正则
- 发布时间:2009-10-29 22:48:19
建议继续学习
近3天十大热文
- [70] Twitter/微博客的学习摘要
- [66] 如何拿下简短的域名
- [65] IOS安全–浅谈关于IOS加固的几种方法
- [64] find命令的一点注意事项
- [63] android 开发入门
- [63] Go Reflect 性能
- [61] 流程管理与用户研究
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录