这个正则表达式有什么区别:/(everything|cool)/gi
和这个:/(?:everything|cool)/gi
?正则表达式:性能
我问这个,因为我有一个正则表达式,我无法给自己写 *这和有,因为你可以看到下面,很多?:
在正则表达式。我读过?:
对性能不利的地方,所以我想删除它。我可以删除它,还是对任何事情都很重要?
* (?:(?=(?:(?:\\.|"(?:\\.|[^"\\])*"|[^\\'"])*'(?:\\.|"(?:\\.|[^"'\\])*"|[^\\'])*')*(?:\\.|"(?:\\.|[^"\\])*"|[^\\'])*$)(?=(?:(?:\\.|'(?:\\.|[^'\\])*'|[^\\'"])*"(?:\\.|'(?:\\.|[^'"\\])*'|[^\\"])*")*(?:\\.|'(?:\\.|[^'\\])*'|[^\\"])*$)(?:\\.|[^\\'"]))+
非捕获组更快速的关键在于它们允许RE引擎进行大量优化。捕获组需要更多的信息由匹配器保存,并且会导致很多更复杂的优化(例如转换为单通DFA)。 – 2012-04-15 17:49:20
奇怪的是,我发现一个非捕获组的性能比甚至没有组都要好。 :P http://jsperf.com/regex-capture-vs-non-capture/2(可能v8具体) – cHao 2012-04-15 17:51:16
这是一个非常好奇的结果。我想知道是否有任何问题垃圾收集踢? (我怀疑那是当我在该页面上运行测试时发生的事情......) – 2012-04-15 18:05:26