regex.test V.S. string.match,用于了解字符串是否与正则表达式匹配

2022-08-29 23:44:56

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

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

这之间有什么区别吗:

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

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


答案 1

基本用法

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

正则表达式对象测试字符串 )

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

字符串matchRegExp )

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

由于计算结果为 ,nullfalse

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

性能

性能有什么区别吗?

是的。我在MDN网站上找到了这个简短的注释:

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

差异是否显著?

答案再次是肯定的!我放在一起的这个jsPerf显示差异是~30% - ~60%,具体取决于浏览器:

test vs match | Performance Test

结论

如果需要更快的布尔检查,请使用此选项。用于在使用全局标志时检索所有匹配项。.test.matchg


答案 2

不要忘记考虑正则表达式中的全局标志:

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

这是因为正则表达式会在找到新匹配项时跟踪最后一个索引。