关于javascript:regex.test V.S.

regex.test V.S. string.match to know if a string matches a regular expression

很多时候,我使用字符串match函数来判断字符串是否与正则表达式匹配。

1
if(str.match(/{regex}/))

这两者有什么区别吗?

1
if (/{regex}/.test(str))

他们似乎给出了同样的结果?


基本用法

首先,让我们看看每个函数的作用:

regexobject.test(字符串)

Executes the search for a match between a regular expression and a specified string. Returns true or false.

字符串匹配(regexp)

Used to retrieve the matches when matching a string against a regular expression. Returns an array with the matches or null if there are none.

由于null评价为false

1
2
3
4
5
if ( string.match(regex) ) {
  // There was a match.
} else {
  // No match.
}

性能

性能方面有什么不同吗?

对。我在MDN网站上找到了这个简短的留言:

If you need to know if a string matches a regular expression regexp, use regexp.test(string).

差异是否显著?

答案是肯定的!我把这个jspef放在一起,根据浏览器的不同,它的差别是~30%-~60%:

test vs match | Performance Test

结论

如果需要更快的布尔检查,请使用.test。当使用g全局标志时,使用.match检索所有匹配项。


不要忘记在regexp中考虑全局标志:

1
2
3
4
5
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi');    // => true
reg.test('abcdefghi');    // => false <=

这是因为当找到新的匹配项时,regexp会跟踪lastindex。