深入剖析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 相关文章推荐
双击滚屏-常用推荐
Nov 29 Javascript
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
Aug 04 Javascript
在js中单选框和复选框获取值的方式
Nov 06 Javascript
js 学习笔记(三)
Dec 29 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
RxJS的入门指引和初步应用
Jun 15 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
js url传值中文乱码之解决之道
2009/11/20 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
教你安装python Django(图文)
2013/11/04 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
Europcar比利时:租车
2019/08/26 全球购物
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
团日活动总结报告
2014/06/25 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
Python实战之实现简易的学生选课系统
2021/05/25 Python
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python