正则表达式。测试V.S.字符串。Match用于了解字符串是否与正则表达式匹配

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

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

这两者之间有什么区别吗:

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

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

188937 次浏览

基本用法

首先,让我们看看每个函数做什么:

regexObject。__abc1 (__abc2)

执行搜索正则表达式与指定字符串之间的匹配。返回真正的

字符串。__abc1 (__abc2)

用于在将字符串与正则表达式匹配时检索匹配项。返回一个包含匹配项的数组,如果没有则返回null

由于null的值为false

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

性能

在性能方面有什么不同吗?

是的。我在MDN网站中找到了这个简短的说明:

如果需要知道字符串是否与正则表达式regexp匹配,请使用regexp.test(string)。

差异显著吗?

答案还是是的!我放在一起的jsPerf显示不同浏览器的区别是~30% ~60%:

test vs match |性能测试

结论

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

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

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

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