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 相关文章推荐
javascript parseInt 大改造
Sep 27 Javascript
Javascript动态引用CSS文件的2种方法介绍
Jun 06 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
jquery中添加属性和删除属性
Jun 03 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
Sep 22 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
Jun 12 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
Jul 17 Javascript
基于vue配置axios的方法步骤
Nov 09 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
js实现随机8位验证码
Jul 24 Javascript
Vue 图片压缩并上传至服务器功能
Jan 15 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中使用X-SendFile头让文件下载更快
2014/06/01 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
JS设计模式之单例模式(一)
2017/09/29 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
JS实现随机点名器
2020/04/12 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
彻底搞懂Python字符编码
2018/01/23 Python
python 实现识别图片上的数字
2019/07/30 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
平面设计师工作职责范文
2013/12/03 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
技能比赛获奖感言
2014/02/14 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
浅析Python实现DFA算法
2021/06/26 Python