深入剖析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 相关文章推荐
JQuery SELECT单选模拟jQuery.select.js
Nov 12 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
May 03 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
vue-cli配置环境变量的方法
Jul 09 Javascript
微信小程序Getuserinfo解决方案图解
Aug 24 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
Vuepress 搭建带评论功能的静态博客的实现
Feb 17 Javascript
vue router 动态路由清除方式
May 25 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 数据结构 算法 三元组 Triplet
2011/07/02 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
微信小程序签到功能
2018/10/31 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
Python中运行并行任务技巧
2015/02/26 Python
Python装饰器的函数式编程详解
2015/02/27 Python
python学生信息管理系统
2018/03/13 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
小区消防演习方案
2014/02/21 职场文书
诚信承诺书范文
2014/03/27 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server