深入剖析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 相关文章推荐
FireFox与IE 下js兼容触发click事件的代码
Nov 20 Javascript
JQuery Dialog的内存泄露问题解决方法
Jun 18 Javascript
ExtJs中简单的登录界面制作方法
Aug 19 Javascript
jQuery 联动日历实现代码
May 31 Javascript
js中的布尔运算符使用介绍
Nov 20 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
JavaScript队列函数和异步执行详解
Jun 19 Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 Javascript
vue.js中$set与数组更新方法
Mar 08 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
JavaScript遍历数组的方法代码实例
Jan 14 Javascript
jQuery编写QQ简易聊天框
Aug 27 jQuery
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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php中并发读写文件冲突的解决方案
2013/10/25 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python2随机数列生成器简单实例
2017/09/04 Python
Python冲顶大会 快来答题!
2018/01/17 Python
python如何爬取个性签名
2018/06/19 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
户外拓展活动方案
2014/02/11 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书