Fork me on GitHub

前端试题-正则中test, exec, match的区别

test

test 是正则表达式的方法,参数是字符串,返回的是布尔值(true或false),查找对应的字符串是否存在

 

exec

RegExpObject.exec(string)

exec是正则表达式的方法,它的参数是字符串,查找并返回当前的匹配结果,并以数组的形式返回,如果没有匹配项,则返回null.

exec() 返回的数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除此之外,它还返回index属性和input属性。

非全局下的 exec(),返回的数组与调用match() 返回的数组是相同的。

若全局(g),那么 match 一次返回所有的结果。而exec 则不同,它会在下次调用 exec 时,从上个匹配的 lastIndex 开始查找。这就是说,可以通过反复调用 exec() 来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

注意:无论RegExpObject是否是全局模式,exec()都会把完整的细节添加到它返回的数组中。这就是exec()与String.match()的不同之处,后者在全局模式下返回的信息要少得多。

 

match

stringObject.match(regexp)

match()方法将检索字符串stringObject,以找到一个或多个与regexp匹配的文本,它的参数是正则表达式,返回值跟exec一样是数组,如果没有匹配值,则返回null。

match()方法比较信赖regexp是否具有全局标志g。

如果没有g(非全局),那么它只在stringObject中执行一次匹配。该返回数组的第0个元素存放的是匹配文本,其余元素存放的是与正则表达式匹配的子表达式匹配的文本。除此之外,返回的数组还包含index属性和input属性。

如果具有g(全局),则它执行全局检索,找到所有匹配子字符串。不过全局匹配返回的数组,它的的数组元素中存放的是stringObject中所有匹配子串,没有index属性或input属性。

注意:在全局检索模式(g)下,match()即不提供与子表达式匹配的文本信息,也不声明每个匹配子串的位置。如果需要这样全局检索信息,可以使用RegExp.exec().

posted @ 2016-02-15 21:52  sunshinegirl_7  阅读(206)  评论(0编辑  收藏  举报