regex.test VS string.match来知道一个string是否与正则expression式匹配

很多时候我使用stringmatch函数来判断一个string是否与正则expression式匹配。

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

这有什么区别:

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

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

基本用法

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

regexObjecttestingstring

执行search正则expression式和指定string之间的匹配。 返回truefalse

string匹配RegExp

用于在匹配正则expression式的string时检索匹配项。 返回一个匹配的数组,如果没有则返回null

由于null计算结果为false

 if ( string.match(regex) ) { // There was a match. } else { // No match. } 

性能

性能有没有什么不同?

是的 。 我在MDN网站上发现了这个短信:

如果您需要知道某个string是否与正则expression式正则expression式匹配,请使用regexp.test(string)。

差异是否显着?

答案再次是YES ! 这个jsPerf我放在一起显示的差异是〜30 % – 〜60 取决于浏览器:

测试vs匹配|性能测试

结论

使用.test如果你想更快的布尔检查。 在使用g全局标志时,使用.match检索所有匹配。

不要忘记考虑你的正则expression式中的全球标志:

 var reg = /abc/g; !!'abcdefghi'.match(reg); // => true !!'abcdefghi'.match(reg); // => true reg.test('abcdefghi'); // => true reg.test('abcdefghi'); // => false <= 

这是因为当find新的匹配项时,Regexp会跟踪lastIndex。