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 相关文章推荐
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
JS文本框追加多个下拉框的值的简单实例
Jul 12 Javascript
javascript检查表单数据是否改变的方法
Jul 30 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
利用JS实现数字增长
Jul 28 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
javascript实现日历效果
Jun 17 Javascript
基于jQuery的时间戳与日期间的转化
Jun 21 jQuery
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 Javascript
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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PDO::errorCode讲解
2019/01/28 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python复数属性和方法运算操作示例
2017/07/21 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
平安建设工作方案
2014/06/02 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
收款委托书
2014/10/14 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
公司周年庆寄语
2019/06/21 职场文书