深入剖析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中把数字转换为字符串的程序代码
Jun 19 Javascript
JQuery判断子iframe何时加载完成解决方案
Aug 20 Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
javascript同步服务器时间和同步倒计时小技巧
Sep 24 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
Vue2 配置 Axios api 接口调用文件的方法
Nov 13 Javascript
node实现基于token的身份验证
Apr 09 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 Javascript
Vite + React从零开始搭建一个开源组件库
Jun 25 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基础学习笔记
2007/03/18 PHP
php 魔术函数使用说明
2010/02/21 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
Python自动化开发学习之三级菜单制作
2017/07/14 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Python上下文管理器全实例详解
2019/11/12 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
利用Python优雅的登录校园网
2020/10/21 Python
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
社会公德演讲稿
2014/05/20 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
财务管理专业自荐书
2014/09/02 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
vue使用watch监听属性变化
2022/04/30 Vue.js