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 相关文章推荐
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
Sep 27 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 Javascript
微信小程序实现传参数的几种方法示例
Jan 10 Javascript
Material(包括Material Icon)在Angular2中的使用详解
Feb 11 Javascript
详解javascript replace高级用法
Feb 17 Javascript
layui插件表单验证提交触发提交的例子
Sep 09 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
做一个有下拉功能的留言版
2006/10/09 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
vue使用vue-cli快速创建工程
2017/07/28 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
Python中用Decorator来简化元编程的教程
2015/04/13 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
浅述python2与python3的简单区别
2018/09/19 Python
Python构建图像分类识别器的方法
2019/01/12 Python
浅析python的Lambda表达式
2019/02/27 Python
利用python开发app实战的方法
2019/07/09 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
Python中return函数返回值实例用法
2020/11/19 Python
医学护理系毕业生求职信
2013/10/01 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
沈阳故宫导游词
2015/01/31 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python