正则表达式exec方法的陷阱
http://www.w3school.com.cn/jsref/jsref_exec_regexp.asp
exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。
如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
var url ="http://www.baidu.com/js/plugin-cb.js";
var regExp = /^http.+\.(js|css)/g;
var s1=regExp.exec(url);
console.log('regExp第一次',regExp.lastIndex);
var s2=regExp.exec(url);
console.log('regExp第二次',regExp.lastIndex);
console.log(s1,s2,url);
注意:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0
最新文章
- 编译自己的Ubuntu内核
- SpringMVC注解汇总(二)-请求映射规则
- java设计模式
- JSP网站开发基础总结《十三》
- 【GoLang】转载:我为什么放弃Go语言,哈哈
- gnu-software
- ScannerDemo------string int
- 安装zabbix server
- Set 与 Multiset
- Android搜索芽发展clientVersion1.0结束(过程和结果显示)
- 可用于Windows Server 2008 R2的Xbox One手柄、接收器驱动
- 从源码角度入手实现RecyclerView的Item点击事件
- Robotium 框架学习之Class By
- mysql filesort 的解决方案
- 【JavaScript】常用的数据类型的处理方式
- 线程--继承Thread
- Python高级网络编程系列之终极篇---自己实现一个Web框架
- Python学习基础(三)——装饰器,列表生成器,斐波那契数列
- 42.纯 CSS 创作一个均衡器 loader 动画
- mac 无法打开xx ,因为无法确认开发者身份
热门文章
- 6.游戏特别离不开脚本(3)-JS脚本操作java(3)(直接操作JS文件或者调用函数)
- hive impala C++ Java垃圾回收 Garbage Collection GC
- Provided Maven Coordinates must be in the form 'groupId:artifactId:version'.
- C语言中的声明与定义的差别
- iOS 获取WIFI SSID及MAC地址
- Hive两种访问方式:HiveServer2 和 Hive Client
- asp.net下的cookieName
- YTU 2442: C++习题 矩阵求和--重载运算符
- codeforces C. Magic Formulas 解题报告
- Opencv:10个步骤检测出图片中条形码