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 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
JavaScript去掉空格的方法集合
Dec 28 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
Javascript常用字符串判断函数代码分享
Dec 08 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
Aug 26 Javascript
jQuery向父辈遍历的简单方法
Sep 18 Javascript
js编写选项卡效果
May 23 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
Feb 18 Javascript
前端js中的事件循环eventloop机制详解
May 15 Javascript
javascript的this关键字详解
May 20 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
Aug 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
基于php 随机数的深入理解
2013/06/05 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP多文件上传类实例
2015/03/07 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
python套接字流重定向实例汇总
2016/03/03 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
python实现多进程代码示例
2018/10/31 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
大学生创业计划书的格式要求
2013/12/29 职场文书
高中生期末评语大全
2014/01/28 职场文书
班组拓展活动方案
2014/08/14 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
vue 实现上传组件
2021/05/31 Vue.js
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL