Javascript中使用exec进行正则表达式全局匹配时的注意事项
2011-11-27 00:00
603 查看
本文就是介绍在使用 Javascript 中使用 exec 进行正则表达式全局匹配时的注意事项。
先看一下常见的用法:
接下来看一下全局模式下的诡异事件:
第二个语句并没有返回期望的结果,而是返回了 null ,这是因为:
在全局模式下,当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把正则表达式对象的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
下面是正常的全局模式下的匹配方式:
从上面的代码我们可以看到,之所以出现第二段代码中的问题,影响因素是 lastIndex ,所以我们可以通过将 lastIndex 手动置 0 的方式来解决这个问题。
总结:
在全局模式下,如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
先看一下常见的用法:
<script type="text/javascript"> var pattern = /http:\/\/([^\/\s]+)/; alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn alert(pattern.exec('http://YITU.org')); // http://YITU.org,YITU.org // 也可以直接写成 /http:\/\/([^/]+)/.exec('http://www.codebit.cn'); </script>
接下来看一下全局模式下的诡异事件:
<script type="text/javascript"> var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符 alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn alert(pattern.exec('http://YITU.org')); // 并没有返回期望的 http://YITU.org,YITU.org ,而是返回了 null </script>
第二个语句并没有返回期望的结果,而是返回了 null ,这是因为:
在全局模式下,当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把正则表达式对象的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
下面是正常的全局模式下的匹配方式:
<script type="text/javascript"> var pattern = /http:\/\/([^\/\s]+)/g; var str = "CodeBit.cn : http://www.codebit.cn | YITU.org : http://YITU.org"; var result; while ((result = pattern.exec(str)) != null) { alert("Result : " + result + " LastIndex : " + pattern.lastIndex); } //Result : http://www.codebit.cn,www.codebit.cn LastIndex : 34 //Result : http://YITU.org,YITU.org LastIndex : 67 </script>
从上面的代码我们可以看到,之所以出现第二段代码中的问题,影响因素是 lastIndex ,所以我们可以通过将 lastIndex 手动置 0 的方式来解决这个问题。
<script type="text/javascript"> var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符 alert(pattern.exec('http://www.codebit.cn')); // http://www.codebit.cn,www.codebit.cn pattern.lastIndex = 0; alert(pattern.exec('http://YITU.org')); // http://YITU.org,YITU.org </script>
总结:
在全局模式下,如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
相关文章推荐
- Javascript中使用exec进行正则表达式全局匹配时的注意事项
- JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。浮点型数据使用注意事项。全局变量特殊之处
- Android WebView使用之JavaScript调用Java代码注意事项
- ArcGIS JavaScript API 4.x中热度图渲染的使用注意事项
- 使用OpenCV进行目标检测的注意事项
- 你不知道的JavaScript--Item14 使用prototype的几点注意事项
- 在UITableView中使用segue进行页面跳转的注意事项
- 使用Response.Write(<script language=javascript>alert的注意事项
- JavaScript中this关键词的使用技巧、工作原理以及注意事项
- Android WebView 使用JavaScript注意事项
- 在html中使用javascript注意事项
- 线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用,不过要注意的是线程间需要做好同步。
- JavaScript数组push方法使用注意事项
- C++使用CInternetSession请求url下载jason数据,并且进行解析。以及注意事项
- JavaScript中的new的使用方法与注意事项详解
- 浅谈使用splice函数对数组中的元素进行删除时的注意事项
- 使用mex进行混合编程的一些注意事项
- JavaScript全局变量和局部变量的使用注意点
- javascript中关键字in以及循环for...in的使用和注意事项
- 使用Android Junit进行测试的注意事项