深入剖析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判断两种格式的输入日期的正确性的代码
Mar 25 Javascript
使用jQuery清空file文件域的解决方案
Apr 12 Javascript
javascript数据结构与算法之检索算法
Apr 04 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
Nov 23 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
小发现之浅谈location.search与location.hash的问题
Jun 23 Javascript
webpack实现一个行内样式px转vw的loader示例
Sep 13 Javascript
小程序指纹验证的实现代码
Dec 04 Javascript
微信小程序获取用户信息并保存登录状态详解
May 10 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 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实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
图片自动更新(说明)
2006/10/02 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
django的ORM模型的实现原理
2019/03/04 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
深入浅析Python中的迭代器
2019/06/04 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
数学国培研修感言
2014/02/13 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
投标诚信承诺书
2014/05/26 职场文书
建设工地安全标语
2014/06/07 职场文书
面试自我评价范文
2014/09/17 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
退休欢送会主持词
2015/07/01 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
python 单机五子棋对战游戏
2022/04/28 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript