深入剖析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 相关文章推荐
ext 同步和异步示例代码
Sep 18 Javascript
javascript工具库代码
Mar 29 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
Oct 11 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
Jul 30 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
浅谈JavaScript的push(),pop(),concat()方法
Jun 03 Javascript
原生JS实现在线问卷调查投票特效
Jan 03 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
jQuery异步提交表单实例
May 30 jQuery
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
Aug 29 Javascript
Vue.js2.0中的变化小结
Oct 24 Javascript
JS动态显示倒计时效果
Dec 12 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和ACCESS写聊天室(十)
2006/10/09 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
百度留言本js 大家可以参考下
2009/10/13 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
浅谈Angular 观察者模式理解
2018/11/01 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
年终考核评语
2014/01/19 职场文书
预备党员政审材料
2014/02/04 职场文书
行政助理的岗位职责
2014/02/18 职场文书
考试作弊检讨书
2014/10/21 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
DSP接收机前端设想
2022/04/05 无线电