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 相关文章推荐
jQuery学习4 浏览器的事件模型
Feb 07 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
Jan 20 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 Javascript
jQuery实现简单日期格式化功能示例
Sep 19 jQuery
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 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 socket方式提交的post详解
2008/07/19 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
php的sso单点登录实现方法
2015/01/08 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
Python如何生成xml文件
2020/06/04 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
2015新年寄语(一句话)
2014/12/08 职场文书
清明节寄语2015
2015/03/23 职场文书
聚会通知怎么写
2015/04/23 职场文书
办公室禁烟通知
2015/04/23 职场文书
治庸问责工作总结
2015/08/11 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
mysql 子查询的使用
2022/04/28 MySQL
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android