免责声明:我的问题不是针对练习,它只是一个示例(尽管如果您对示例本身有任何有趣的提示,请随时分享!)。
假设我正在使用 JavaScript 中的正则表达式解析一些字符串,我的主要关注点是性能(速度)。
我有一段正则表达式,用于检查数字字符串,然后使用 Number
解析它(如果它是数字):
if (/^\[[0-9]+]$/.test(str)) {
val = Number(str.match(/^\[([0-9]+)$/)[1]);
}
请注意条件测试如何在数字周围没有捕获组。这导致写出基本相同的正则表达式两次,除了第二次使用捕获组。
我想知道的是这个;将捕获组添加到与 test()
一起使用的正则表达式中是否会以任何方式影响性能?我只想在两个地方都使用捕获正则表达式,只要不影响性能即可。
关于为什么我先做 test()
然后 match()
而不是 match()
然后检查 空
;我希望在出现未命中时尽可能快地解析,但在命中时稍微慢一点也可以。
如果上面的内容还不清楚,我指的是 JavaScript 的正则表达式引擎——尽管如果这在不同的引擎中有所不同,那么也很高兴知道。我在这里专门从事 Node.js 工作,它是否也因 JS 引擎而异。
提前致谢!
最佳答案
做 2 个正则表达式 - 在范围上非常相似 - 几乎总是比做一个正则表达式慢,因为正则表达式是贪婪的(这意味着它们会尽可能多地匹配,通常意味着取最大数量的时间可能)。
基本上,您要问的是:在最坏的情况下(也就是使用 .test
从捕获中节省内存),减少内存的成本是否比仅使用额外的内存更快?答案是否定的,使用额外的内存可以加快您的进程。
但不要相信我的话,这是一个 jsperf:http://jsperf.com/regex-perf-numbers
关于javascript - 在 RegExp#test 中使用捕获组是否会降低性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33326414/