深入剖析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 相关文章推荐
解决Jquery load()加载GB2312页面时出现乱码的两种方案
Sep 10 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
学习JavaScript设计模式之观察者模式
Apr 22 Javascript
javascript宿主对象之window.navigator详解
Sep 07 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
Dec 29 Javascript
React学习笔记之列表渲染示例详解
Aug 22 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 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判断变量是否为0的方法
2014/02/08 PHP
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
python设计模式大全
2016/06/27 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
python中map的基本用法示例
2018/09/10 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
民族团结先进个人材料
2014/02/05 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
信息简报范文
2015/07/21 职场文书
八年级物理教学反思
2016/02/19 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
财务年终工作总结大全
2019/06/20 职场文书