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 相关文章推荐
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
Jun 22 Javascript
学习vue.js条件渲染
Dec 03 Javascript
Vue Promise的axios请求封装详解
Aug 13 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
Jan 08 Javascript
node全局变量__dirname与__filename的区别
Jan 14 Javascript
vue使用swiper实现中间大两边小的轮播图效果
Nov 24 Javascript
解决vue组件销毁之后计时器继续执行的问题
Jul 21 Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 Javascript
使用vant的地域控件追加全部选项
Nov 03 Javascript
nuxt 路由、过渡特效、中间件的实现代码
Nov 06 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文件
2007/01/04 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Firefox div高度自适应
2009/04/28 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
浅谈Python 参数与变量
2020/06/20 Python
Python调用C语言程序方法解析
2020/07/07 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
演讲比赛获奖感言
2014/02/02 职场文书
运动员口号
2014/06/09 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
活着观后感
2015/06/03 职场文书
男人帮观后感
2015/06/18 职场文书