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 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
浅谈Javascript事件模拟
Jun 27 Javascript
去掉gridPanel表头全选框的小例子
Jul 18 Javascript
jQuery实现的仿百度分页足迹效果代码
Oct 30 Javascript
深入探讨前端框架react
Dec 09 Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
Nov 07 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
JavaScript日期工具类DateUtils定义与用法示例
Sep 03 Javascript
vue基于element的区间选择组件
Sep 07 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
react koa rematch 如何打造一套服务端渲染架子
Jun 26 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
操作Oracle的php类
2006/10/09 PHP
一个简单的MySQL数据浏览器
2006/10/09 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
javascript中Function类型详解
2015/04/28 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
Python类的动态绑定实现原理
2020/03/21 Python
vscode调试django项目的方法
2020/08/06 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
什么叫做SQL注入,如何防止
2016/10/04 面试题
介绍一下gcc特性
2015/10/31 面试题
电气自动化大学生求职信
2013/10/16 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
Win11软件图标固定到任务栏
2022/04/19 数码科技