深入剖析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学习随笔(使用window和frame)的技巧
Mar 08 Javascript
漂亮的提示信息(带箭头)
Mar 21 Javascript
javascript 获取网页标题代码实例
Jan 22 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
JavaScript中的object转换成number或string规则介绍
Dec 31 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
Mar 05 Javascript
值得分享的Bootstrap Table使用教程
Nov 23 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
webpack 4.0.0-beta.0版本新特性介绍
Feb 10 Javascript
微信小程序实现渐入渐出动画效果
Jun 13 Javascript
利用js实现简易红绿灯
Oct 15 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实现网上点歌(二)
2006/10/09 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
python绘制立方体的方法
2018/07/02 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
python__new__内置静态方法使用解析
2020/01/07 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
自荐信如何“自荐”
2013/10/24 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
就业协议书范本
2014/04/11 职场文书
婚宴父亲致辞
2015/07/27 职场文书
大学开学感言
2015/08/01 职场文书