深入剖析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乱码的一次解决过程 图解教程
Feb 20 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
May 06 Javascript
关于JS控制代码暂停的实现方法分享
Oct 11 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
Jun 17 Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
Apr 16 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
May 05 Javascript
带你彻底理解JavaScript中的原型对象
Apr 14 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
用Python实现一个简单的线程池
2015/04/07 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
python实现发送邮件功能代码
2017/12/14 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
《锄禾》教学反思
2014/04/08 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
学校捐书倡议书
2015/04/27 职场文书
2015年教研工作总结
2015/05/23 职场文书
地道战观后感2000字
2015/06/04 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS