Javascript中正则表达式的全局匹配模式分析


Posted in Javascript onApril 26, 2011
var str = "123#abc"; 
var re = /abc/ig; 
console.log(re.test(str)); //输出ture 
console.log(re.test(str)); //输出false 
console.log(re.test(str)); //输出ture 
console.log(re.test(str)); //输出false

在创建正则表达式对象时如果使用了“g”标识符或者设置它了的global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字符串进行全局匹配。在全局匹配模式下可以对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开始查找的起始位置。lastIndex属性的初始值为0,找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的位置索引,用来标识下次执行匹配时开始查找的位置。如果找不到匹配的项lastIndex的值会被设置为0。当没有设置正则对象的全局匹配标志时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。可以通下面的代码来查看在执行匹配相应的lastIndex 属性的值。
var str = "123#abc"; 
var re = /abc/ig; 
console.log(re.test(str)); //输出ture 
console.log(re.lastIndex); //输出7 
console.log(re.test(str)); //输出false 
console.log(re.lastIndex); //输出0 
console.log(re.test(str)); //输出ture 
console.log(re.lastIndex); //输出7 
console.log(re.test(str)); //输出false 
console.log(re.lastIndex); //输出0

关于RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法

正则对象的test方法返回值为true或flase,在仅需要检测目标字符串与指定模式是否匹配,但不需要获取匹配内容时这个方法非常有用。当需要获取匹配结果时就需要用RegExp类型的exec(str)方法或String类型的match(rgExp)方法。

RegExp.prototype.exec(str)方法返回NULL或返会一个数组,在数组的第0个元素存放的是在字符串str中查找到的匹配内容,1到n个元素返回的是在模式中使用括号"()"指定的子匹配项的内容。

在没有使用全局标志时String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行为类似。当设置了全局匹配标志时String.prototype.math(rgExp)方法返回的数组项元素0到n中包含了所有匹配到的项不包含子匹配项。这时可以使用RegExp.$1..$9获取9个子匹配。

Javascript 相关文章推荐
js数字输入框(包括最大值最小值限制和四舍五入)
Nov 24 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
Dec 19 Javascript
js 数值项目的格式化函数代码
May 14 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
May 08 Javascript
Jquery绑定事件(bind和live的区别介绍)
Aug 23 Javascript
js运动动画的八个知识点
Mar 12 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
vue中$refs的用法及作用详解
Apr 24 Javascript
webpack 代码分离优化快速指北
May 18 Javascript
vue源码中的检测方法的实现
Sep 26 Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 #Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
Apr 26 #Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 #Javascript
超轻量级的基于jquery的三级展开列表
Apr 26 #Javascript
jqPlot 基于jquery的画图插件
Apr 26 #Javascript
让浏览器非阻塞加载javascript的几种方法小结
Apr 25 #Javascript
jQuery 版元素拖拽原型代码
Apr 25 #Javascript
You might like
php的curl实现get和post的代码
2008/08/23 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
Web开发之JavaScript
2012/03/29 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python实现字典依据value排序
2016/02/24 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
中专毕业自我鉴定
2013/10/16 职场文书
党建目标管理责任书
2014/07/25 职场文书
解放思想演讲稿
2014/09/11 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
辩护词范文大全
2015/05/21 职场文书
公司开业主持词
2015/07/02 职场文书
高一军训感想
2015/08/07 职场文书