深入剖析javascript中的exec与match方法


Posted in Javascript onMay 18, 2016

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

var re=new RegExp(/\d/);
re.exec( "abc4def" );

//或者使用perl风格:

/\d/.exec( "abc4def" );

//match才是字符串类提供的方法,它的参数是正则表达式对象,如下用法是正确的:

"abc4def".match(\d);

exec和match返回的都是数组

如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。

下面两个alert函数弹出的信息是一样的:

var str= "cat,hat" ;
var p=/at/; //没有g属性
alert(p.exec(str))
alert(str.match(p))

都是"at"。在这种场合下exec等价于match。

但是如果正则表达式是全局匹配(g属性)的,那么以上代码结果不一样了:

var str= "cat,hat" ;
var p=/at/g; //注意g属性
alert(p.exec(str))
alert(str.match(p))

分别是

"at"

"at,at"。

因为exec永远只返回第一个匹配,而match在正则指定了g属性的时候,会返回所有匹配。

exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)

如下的代码将弹出"cat2,at":

var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str))

其中第一个元素是匹配的字符串"cat2",之后的元素是括号中匹配的"at"。

match函数在满足如下条件下将越俎代庖,实现和exec一样的功能:

1、正则表达式中含有分组(括号)

2、返回唯一的匹配

且看如下的代码:

var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str))
alert(str.match(p))

都将弹出消息"cat2,at",是不是觉得很奇怪呢?

总结:

match是返回所有匹配的字符串合成的数组,但是正则表达式必须指定全局g属性才能返回所有匹配,不指定g属性则会返回一个只有一个元素的数组。

exec永远返回与第一个匹配相关的信息,其返回数组包括第一个匹配的字串,所有分组的反向引用。

某些情况下exec返回的结果和match返回的结果一样:

var str= "cat,hat" ;
var p=/at/; //没有g属性
alert(p.exec(str))
alert(str.match(p))

都弹出“at”

某些情况下match返回的结果和exec返回的结果一样:

var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str))
alert(str.match(p))

都弹出“cat2,at”

以上这篇深入剖析javascript中的exec与match方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript中定义方法的另类写法(批量定义js对象的方法)
Feb 25 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
js数组中如何随机取出一个值
Jun 13 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
jQuery Easyui datagrid/treegrid 清空数据
Jul 09 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
javascript 正则表达式去空行方法
Jan 24 Javascript
jQuery实现表格冻结顶栏效果
Aug 20 jQuery
Vue中使用Sortable的示例代码
Apr 07 Javascript
js使用formData实现批量上传
Mar 27 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 #Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 #Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 #Javascript
12个非常实用的JavaScript小技巧【推荐】
May 18 #Javascript
JQuery解析XML数据的几个简单实例
May 18 #Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 #Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 #Javascript
You might like
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
2014组织生活会方案
2014/05/19 职场文书
个人担保书范文
2014/05/20 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
先进教师个人总结
2015/02/11 职场文书
护士节慰问信
2015/02/15 职场文书
2015年领班工作总结
2015/04/29 职场文书
工作犯错保证书
2015/05/11 职场文书
毕业论文致谢信
2015/05/14 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
go web 预防跨站脚本的实现方式
2021/06/11 Golang
Windows server 2016服务器基本设置
2022/08/14 Servers