深入剖析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使用手册之一
Mar 24 Javascript
脚本之家贴图转换+转贴工具用到的js代码超级推荐
Apr 05 Javascript
JavaScript中的some()方法使用详解
Jun 09 Javascript
angularjs 源码解析之scope
Aug 22 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
Javascript for in的缺陷总结
Feb 03 Javascript
如何编写一个完整的Angular4 FormText 组件
Nov 18 Javascript
解决微信小程序防止无法回到主页的问题
Sep 28 Javascript
基于AngularJs select绑定数字类型的问题
Oct 08 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
TypeScript 运行时类型检查补充工具
Sep 28 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源代码安装常见错误与解决办法分享
2013/05/28 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
php使用GeoIP库实例
2014/06/27 PHP
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
Python三级目录展示的实现方法
2016/09/28 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python实现图片转字符小工具
2019/04/30 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
学校师德承诺书
2014/05/23 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
劳模先进事迹材料
2014/12/24 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python