深入剖析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的数据类型检测
Jul 10 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
js数组的基本操作(很全自己整理的)
Oct 16 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
javascript实现图片轮播效果
Jan 20 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 Javascript
JavaScript嵌入百度地图API的最详细方法
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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
php结合表单实现一些简单功能的例子
2011/06/04 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
详解Python中的正则表达式的用法
2015/04/09 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
python numpy中cumsum的用法详解
2019/10/17 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
物业保安主管岗位职责
2013/12/25 职场文书
学校元旦晚会方案
2014/02/19 职场文书
企业法人授权委托书
2014/04/03 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
信仰心得体会
2014/09/05 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis