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 相关文章推荐
Prototype使用指南之array.js
Jan 10 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
jQuery插件实现无缝滚动特效
Nov 24 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
Sep 12 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
JS对象的深度克隆方法示例
Mar 16 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
说明你的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
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
JavaScript 高级语法介绍
2009/06/15 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
详解python算法之冒泡排序
2019/03/05 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
python如何处理程序无法打开
2020/06/16 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
生产操作工岗位职责
2014/09/16 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
教师节祝酒词
2015/08/11 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python