【发布时间】:2014-02-14 06:49:45
【问题描述】:
根据MDN's RegExp Guide,正则表达式文字会被编译,而通过调用构造函数创建的 RegExp 对象则不会。
我现在的问题是,编译什么时候进行?由于文字具有独特的语法,因此在解析期间它被标识为正则表达式。这样就可以编译一次并在每次评估时重用结果,从而导致两个示例具有(几乎)相同的速度。
var str = "Hello World";
// Example 1
var regExp1 = /[aeiou]+/gi;
for(var i = 0; i < 1000; ++i)
regExp1.exec(str);
// Example 2
for(var j = 0; j < 1000; ++j)
/[aeiou]+/gi.exec(str);
任何想法是否被任何 JavaScript 引擎在实践中使用?
【问题讨论】:
-
不确定你是如何测试“速度”的,但是有 JSPerf:jsperf.com/testing-regexp-define
标签: javascript regex performance compilation