深入剖析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 相关文章推荐
javascritp实现input输入框相关限制用法
Jun 29 Javascript
起点页面传值js,有空研究学习下
Jan 25 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
原生JavaScript实现瀑布流布局
Jun 28 Javascript
javascript点击按钮实现隐藏显示切换效果
Feb 03 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
vue弹窗组件使用方法
Apr 28 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
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类中Static方法效率测试代码
2010/10/17 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
JS前端笔试题分析
2016/12/19 Javascript
Angular2库初探
2017/03/01 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
Angular脚手架开发的实现步骤
2019/04/09 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
python读取图片任意范围区域
2019/01/23 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
简单了解python数组的基本操作
2019/11/26 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
会议邀请书范文
2014/02/02 职场文书
学历公证书范本
2014/04/09 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技