免责声明:我的问题不只是练习,而仅仅是一个示例(尽管如果您对示例本身有任何有趣的提示,请随时分享!)。

假设我正在使用正则表达式在JavaScript中解析一些字符串,而我的主要重点是性能(速度)。

我有一块正则表达式,它检查一个数字字符串,然后使用Number解析它(如果它是数字的):

if (/^\[[0-9]+]$/.test(str)) {
  val = Number(str.match(/^\[([0-9]+)$/)[1]);
}

注意条件测试如何在数字周围没有捕获组。除了第二次使用捕获组外,这导致两次写出基本相同的正则表达式。

我想知道的是在条件下将捕获组添加到与test()一起使用的正则表达式中是否会以任何方式影响性能?只要不影响性能,我想在两个地方简单地使用捕获正则表达式。

还有一个问题,为什么我要先做test()然后再做match()而不是match()并检查null?我想在出现未命中时保持尽可能快的解析速度,但是在遇到问题时可以稍慢一点。

如果从上面还不清楚,我指的是JavaScript的regex引擎-尽管如果各个引擎之间的代码有所不同,那么也很高兴知道。我在这里专门在Node.js中工作,如果它在JS引擎之间也有所不同的话。

提前致谢!

最佳答案

进行2个正则表达式-范围非常相似-几乎总是比做一个正则表达式慢,因为正则表达式很贪心(这意味着它们将尽最大可能进行匹配,通常意味着要花费尽可能多的时间) 。

您要问的基本上是:在最坏的情况下(也就是使用.test从捕获中保存在内存中)减少内存的成本比仅使用额外的内存要快吗?答案是否定的,使用额外的内存可以加快处理速度。

不过请不要相信我,这是一个jsperf:http://jsperf.com/regex-perf-numbers

09-10 10:20
查看更多