gpt4 book ai didi

javascript - 什么时候编译 JavaScript 正则表达式文字

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:56 26 4
gpt4 key购买 nike

根据 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 引擎是否在实践中使用它的想法?

最佳答案

MDN docs明确指出:

The literal notation provides compilation of the regular expression when the expression is evaluated.

The constructor of the regular expression object, for example, new RegExp("ab+c"), provides runtime compilation of the regular expression

你做的测试不是很清楚。你在哪里衡量绩效?这就是我认为应该制作它们的方式:

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)来看,构造函数更快

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

关于javascript - 什么时候编译 JavaScript 正则表达式文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com