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

时间:2012-06-07 21:26:25

标签: javascript regex performance

我多次使用字符串match函数来了解字符串是否与正则表达式匹配。

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

这有什么区别:

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

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

3 个答案:

答案 0 :(得分:400)

基本用法

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

regexObject test String

  

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

字符串 match RegExp

  

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

由于null评估为false

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

效果

表现有什么不同吗?

即可。我在MDN site

中找到了这个简短的说明
  

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

差异显着吗?

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

test vs match | Performance Test

结论

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

答案 1 :(得分:92)

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

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

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

答案 2 :(得分:1)

这是我的benchmark results benchmark results

测试4,267,740 ops / sec±1.32%(已采样60个运行)

exec 3,649,719 ops / sec±2.51%(已采样60个运行)

匹配3,623,125 ops / sec±1.85%(62次运行采样)

索引6,230,325 ops / sec±0.95%(采样了62个运行)

test方法比match方法快,但是最快的方法是indexOf