正则表达式匹配比检查对象中的键作为集合更有效吗?

时间:2017-09-04 00:24:52

标签: javascript regex

所以,在JavaScript中,我需要检查是否有一种简单,快速的方法来检查长度为1的字符串是否属于某些字符集,例如它是否为javascript标识符的字符串字符?

我写了以下测试:

//performance test for matching

var re = /[a-zA-Z$_]/;

console.time("regex");
for(var i=0;i<100000;i++) re.test("_");
console.timeEnd("regex");

var objs = {"_":true, 0:true, 1:true, 2:true, 3:true, 4:true, 5:true, 6:true, 7:true, 8:true, 9:true, a:true, b:true, c:true, d:true, e:true, f:true, g:true, h:true, "i":true, j:true, k:true, 
  l:true, m:true, n:true, o:true, p:true, q:true, r:true, t:true, $:true
};


console.time("objcheck");
for(var i=0;i<100000;i++) "_" in objs;
console.timeEnd("objcheck");
/*
regex: 10ms
objcheck: 1ms
*/

这里奇怪的是,在一致的基础上,检查定义为集合的对象中的键似乎比执行单字符正则表达式匹配要快得多。为什么会这样?这里的正则表达式不应该更快吗?

1 个答案:

答案 0 :(得分:0)

根据您的数据,没有;正则表达式并不比集合快。

这是因为正则表达式需要在运行之前进行编译。虽然您可以通过预编译正则表达式来改进这些数字,但正则表达式比集合或普通旧循环更通用,因此解释器可以对它们进行更少的优化。