【发布时间】:2014-04-26 20:48:13
【问题描述】:
这两种表达方式都适合我:
E1=> work(?:\s+)?group
E2=> work(\s+)?group
考虑到空格可能是换行符 (\s+),我需要捕获 workgroup 或 work group?
但是,第一个表达式有一个非捕获组(?:,我想知道它在正则表达式的性能/快速输出方面是更差还是更好。换句话说,就性能而言,什么是最好的表达方式?
【问题讨论】:
-
你为什么不用
\s*? -
只要问题是a 会比 b 快还是 b 会比 a 快,最好的解决方案就是为自己设置一个小基准。非捕获组可能是最小的一点内存密集型,但
\s*是一个更好的解决方案,正如已经建议的那样。 -
一个非捕获组对于正则表达式解析器/词法分析器将花费更长的时间,但由于不必存储捕获而执行得更快。
-
@MichaelBerkowski:“最小的一点内存密集型不可估量”:在当前示例中可能,但通常它取决于捕获的大小
-
谢谢大家。向你学习很多。我现在正在使用 \s* 。考虑到一个真实的表达式,我需要从两个中选择 (?: 差异,根据正则表达式的效率/性能,您会选择什么。我的数据库有 6700 个索引 PDF 和 2,108,964 个单词。Exp1=> WORD1(?:\s+\w+ ){0,2}\s*\bdefin(es?|ed|itions?|ing)\b / Exp2=> WORD1(\s+\w+){0,2}\s*\bdefin(es?|ed |itions?|ing)\b 谢谢!
标签: javascript regex regex-group capturing-group