JavaScript正则表达式文字何时编译



根据MDN的REGEXP指南正则表达式文字,而通过调用构造函数创建的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-engine?

MDN文档清楚地指出:

评估表达式时,字面符号提供了正则表达式的汇编。

正则表达式对象的构造函数,例如新的Regexp(" AB C"),提供了正则表达式的运行时汇编

您所做的测试不是很清楚。您在哪里衡量性能?这就是我看到它们应该被制作的方式:

start = new Date();
for(var j = 0; j < 1000000; ++j)
    /[aeiou]+/gi.exec(str);
console.log(new Date - start);
start = new Date();
regex = new RegExp("[aeiou]+", "gi");
for(var j = 0; j < 1000000; ++j)
    regex.exec(str);
console.log(new Date - start);

这会产生:

147
118

显然,构造函数的速度更快(Chrome)

在您的测试中,您根本没有测试构造函数。您只是将第一个测试中的文字分配给一个变量名称。基本上测试是相同的。

最新更新