深入剖析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 国际象棋棋盘 实现代码
Jun 26 Javascript
最佳的addEvent事件绑定是怎样诞生的
Oct 24 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
谈一谈javascript闭包
Jan 28 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
Dec 07 Javascript
vue.js父组件使用外部对象的方法示例
Apr 25 Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 Javascript
vue组件与复用详解
Apr 08 Javascript
使用Node.js写一个代码生成器的方法步骤
May 10 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 Javascript
基于javascript处理nginx请求过程详解
Jul 07 Javascript
前端使用crypto.js进行加密的函数代码
Aug 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
十天学会php之第八天
2006/10/09 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
详解vuex的简单使用
2018/03/12 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
SQL中where和having的区别
2012/06/17 面试题
数据库方面面试题
2012/04/22 面试题
环保小标语
2014/06/13 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
八年级历史教学反思
2016/02/19 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
2019 入党申请书范文
2019/07/10 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python