深入剖析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中的call实现继承
Jan 22 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
Apr 02 Javascript
JavaScript SHA512&SHA256加密算法详解
Aug 11 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
基于jquery实现图片上传本地预览功能
Jan 08 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
JS代码触发事件代码实例
Jan 02 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
Apr 27 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的知识
2006/11/17 PHP
php 将excel导入mysql
2009/11/09 PHP
php变量范围介绍
2012/10/15 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
Django保护敏感信息的方法示例
2019/05/09 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
类的核心特性有哪些
2014/01/01 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
类和结构的区别
2012/08/15 面试题
GWT的应用有哪两种部署模式
2012/12/21 面试题
绘画专业自荐信范文
2014/02/23 职场文书
成绩单公证书
2014/04/10 职场文书
小露珠教学反思
2014/04/30 职场文书
校车安全责任书
2014/08/25 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
解决redis批量删除key值的问题
2022/03/23 Redis
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python