深入剖析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 相关文章推荐
js中几种去掉字串左右空格的方法
Dec 25 Javascript
javascript编程起步(第六课)
Feb 27 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
Javascript 面向对象 命名空间
May 13 Javascript
jquery 新建的元素事件绑定问题解决方案
Jun 12 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
May 27 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
Mar 10 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
Vue中keep-alive组件作用详解
Feb 04 Javascript
OpenLayers实现图层切换控件
Sep 25 Javascript
vue内置组件keep-alive事件动态缓存实例
Oct 30 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 MemCached高级缓存配置图文教程
2010/08/05 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP6新特性分析
2016/03/03 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
PHP7 其他修改
2021/03/09 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
详解Python字典的操作
2019/03/04 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
python中yield的用法详解
2021/01/13 Python
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
高中毕业生的个人自我评价
2014/02/21 职场文书
电子商务求职信
2014/06/15 职场文书
单位推荐信范文
2015/03/27 职场文书
详解MySQL的半同步
2021/04/22 MySQL
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技