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文件中写el表达式取不到值的原因及解决方法
Dec 23 Javascript
javascript从定义到执行 你不知道的那些事
Jan 04 Javascript
自动化测试读写64位操作系统的注册表
Aug 15 Javascript
超详细的JS弹出窗口代码大全
Apr 18 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
Oct 27 Javascript
js Canvas绘制圆形时钟效果
Feb 17 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
Javascript类型判断相关例题及解析
Aug 26 Javascript
vue组件添加事件@click.native操作
Oct 30 Javascript
解决Vue watch里调用方法的坑
Nov 07 Javascript
Vue实现boradcast和dispatch的示例
Nov 13 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
浅析iis7.5安装配置php环境
2015/05/10 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
php实现的生成排列算法示例
2019/07/25 PHP
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
jquery实现对联广告的方法
2015/02/05 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
python端口扫描系统实现方法
2014/11/19 Python
深入Python函数编程的一些特性
2015/04/13 Python
关于反爬虫的一些简单总结
2017/12/13 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
怎样创建、运行java程序
2014/08/01 面试题
亲子拓展活动方案
2014/02/20 职场文书
党员目标管理责任书
2014/07/25 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
遗嘱范文
2015/08/07 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
mysql的单列多值存储实例详解
2022/04/05 MySQL
MySQL去除密码登录告警的方法
2022/04/20 MySQL
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers