Согласно руководству MDN по регулярным выражениям, литералы регулярных выражений компилируются, а Объекты 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-движком?