深入剖析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类定义例子
Sep 12 Javascript
JQuery autocomplete 使用手册
Apr 01 Javascript
基于jquery的一个简单的脚本验证插件
Apr 05 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 Javascript
Javascript+CSS3实现进度条效果
Oct 28 Javascript
Node.js编写CLI的实例详解
May 17 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 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
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
php常用数学函数汇总
2014/11/21 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
js DOM的学习笔记
2011/12/22 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
js实现批量删除功能
2020/08/27 Javascript
Python中对列表排序实例
2015/01/04 Python
用Python抢过年的火车票附源码
2015/12/07 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
详解python算法常用技巧与内置库
2020/10/17 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
物业管理应届生求职信
2013/10/28 职场文书
奥利奥广告词
2014/03/20 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
辩护意见书
2015/06/04 职场文书