js正则表达exec与match的区别说明


Posted in Javascript onJanuary 29, 2014

以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。

最近开发遇到一些需要使用正则表达式,顺便研究一下

正则表达式对象有两个定义方式::

1、第一种定义:

new RegExp(pattern, attributes);如var reg = new RegExp("abc","g")

其中pattern为表示表达式内容,如上表示匹配abc

attributes:g,全局匹配,i不区分大小写,m执行多行匹配,用最多的为g和i

2、第二种定义:/pattern/attributes.

如:var reg = /abc/g;

正则表达的规则一些规则在此不再说明,只记录exec和match的区别:

1、exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:

如上定义
var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
reg.exec(str ); 

2、match是字符串执行匹配正则表达式规则的方法,他的参数是正则表达,如

var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
str.match(reg);

3、exec和match返回的都是数组;

如果exec执行的正则表达式没有子表达式(小括号内的内容,如/abc(\s*)/中的(\s*) ),如果有匹配,就返回第一个匹配的字符串内容,此时的数组仅有一个元素,如果没有匹配返回null;

var reg = new RegExp("abc") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

执行如上代码,你会发现两者内容均为一样:abc,

4、如果定义正则表达对象为全局匹配如:

var reg = new RegExp("abc","g") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

则 为abc和abc,abc;因为match执行了全局匹配查询;而exec如果没有子表达式只会找到一个匹配的即返回。

5、当表示中含有子表达式的情况:

var reg = new RegExp("a(bc)") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

你会发现两者执行的结果都是:abc,bc;

6、当如果正则表达式对象定义为为全局匹配

var reg = new RegExp("a(bc)","g") ;
var str = "3abc4,5abc6";
alert(reg.exec(str));
alert(str.match(reg));

则两者返回的结果是abc,bc和abc,abc,

总结为:

1、当正则表达式无子表达式,并且定义为非全局匹配时,exec和match执行的结果是一样,均返回第一个匹配的字符串内容;

2、当正则表达式无子表达式,并且定义为全局匹配时,exec和match执行,做存在多处匹配内容,则match返回的是多个元素数组;

3、当正则表达式有子表示时,并且定义为非全局匹配,exec和match执行的结果是一样如上边的第5种情况;

4、当正则表达式有子表示时,并且定义为全局匹配,exec和match执行的结果不一样,此时match将忽略子表达式,只查找全匹配正则表达式并返回所有内容,如上第6种情况;

也就说,exec与全局是否定义无关系,而match则于全局相关联,当定义为非全局,两者执行结果相同

Javascript 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
Jan 28 Javascript
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
javascript 验证日期的函数
Mar 18 Javascript
js展开闭合效果演示代码
Jul 24 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
Aug 27 Javascript
详解webpack 入门与解析
Apr 09 Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 Javascript
vue-router懒加载速度缓慢问题及解决方法
Nov 25 Javascript
JavaScript常用事件介绍
Jan 21 Javascript
jQuery ajax - getScript() 方法和getJSON方法
May 14 jQuery
jquery实现input输入框实时输入触发事件代码
Jan 28 #Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 #Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 #Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 #Javascript
原生javascript实现无间缝滚动示例
Jan 28 #Javascript
IE、FF浏览器下修改标签透明度
Jan 28 #Javascript
纯css+js写的一个简单的tab标签页带样式
Jan 28 #Javascript
You might like
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
pandas string转dataframe的方法
2018/04/11 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
节能环保标语
2014/06/12 职场文书
广告业务员岗位职责
2015/02/13 职场文书
对学校的意见和建议
2015/06/04 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS