Javascript中使用exec进行正则表达式全局匹配时的注意事项
JavaScript正则表达式 使用 进行 注意事项 匹配 全局 exec
2023-06-13 09:14:31 时间
本文就是介绍在使用Javascript中使用exec进行正则表达式全局匹配时的注意事项。
先看一下常见的用法:
复制代码代码如下:
先看一下常见的用法:
<scripttype="text/javascript">
varpattern=/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>
接下来看一下全局模式下的诡异事件:
<scripttype="text/javascript">
varpattern=/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。
下面是正常的全局模式下的匹配方式:
<scripttype="text/javascript">
varpattern=/http:\/\/([^\/\s]+)/g;
varstr="CodeBit.cn:http://www.codebit.cn|YITU.org:http://YITU.org";
varresult;
while((result=pattern.exec(str))!=null){
alert("Result:"+result+"LastIndex:"+pattern.lastIndex);
}
//Result:http://www.codebit.cn,www.codebit.cnLastIndex:34
//Result:http://YITU.org,YITU.orgLastIndex:67
</script>
从上面的代码我们可以看到,之所以出现第二段代码中的问题,影响因素是lastIndex,所以我们可以通过将lastIndex手动置0的方式来解决这个问题。
<scripttype="text/javascript">
varpattern=/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 高级教程 视频_精通JavaScript
- JavaScript小技能:原型链的运作机制、Promise链
- javascript_JavaScript走向成熟
- 【说站】javascript事件冒泡是什么
- JavaScript正则表达式的练习
- Vue项目打包报错:JavaScript heap out of memory
- js正则表达式语法大全_JavaScript正则
- java正则表达式语法例子_javascript正则表达式
- javascript使用正则表达式替换或者捕获子字符串
- js 怎么使用正则表达式-JavaScript 正则表达式
- js 怎么使用正则表达式-JavaScript正则表达式常用技巧
- JS引擎(2):Java平台上JavaScript引擎—Rhino/Nashorn概述
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- JavaScript入门教程(1)什么是JS
- JavaScript验证浏览器是否支持javascript的方法小结
- javascript正则表达式用法小结
- JavaScript十六进制RGB色码转换器
- javascript弹出层居中效果的制作
- Asp.net页面调用javascript变量的值
- javascript之正则表达式基础知识小结
- JavaScript高级程序设计(第3版)学习笔记6初识js对象
- javascript获取隐藏dom的宽高具体实现
- JavaScript利用正则表达式去除日期中的-
- javascript使用正则表达式检测IP地址
- PHP和javascript常用正则表达式及用法实例
- javascript正则表达式参数/g与/i及/gi的使用指南
- 深入理解javascript作用域和闭包