快捷搜索:

彻底领悟JavaScript中的exec与match方法

涉猎本文之前,请先看下面一道题:

题目17:Read the following javascript code:

var someText="web2.0 .net2.0";

var pattern=/(w+)(d).(d)/g;

var outCome_exec=pattern.exec(someText);

var outCome_matc=someText.match(pattern);

What is outCome_exec[1] and outCome_matc[1]?

Choice A: true

Choice B: false

Choice C: null

Choice D: Web

Choice E: Web2.0

Choice F: undefined

Choice G: net2.0

这道题听说是笃信服公司的一道笔试题,也是引起我写本日这篇文章的缘故原由,不过题目我轻细改动了一下,假如这道题你答对了,你可以不往下面看了。

-----------------------------------------------------------------

javascript中与正则表达式有关的匹配字符串的函数主要有RegExp类的措施exec(string)以及String类的措施match(regex),当然还有一些其他的措施,这里不作评论争论,然则可能不少法度榜样员都邑肴杂exec和match,这里枚举二者的重点特点:

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",是不是感觉很稀罕呢?

以下链接供给了一些演示:http://down1.kuqin.com/html/exec_match.htm

现在我们再往返首文章开首提出的问题:

您可能还会对下面的文章感兴趣: