/ / Коли Javascript "ініціалізує" шаблон RegEx? - javascript, regex

Коли Javascript "ініціалізує" шаблон RegEx? - javascript, regex

Я подбаю про те, щоб оголосити шаблон RegEx раз іповторно використовувати, якщо можливо, з міркувань продуктивності. Я не зовсім впевнений, чому - те, що я, ймовірно, читав один раз багато років тому, і було записане в губці черепа.

Я опиняюсь у важкій для регексації ситуації, і виникла думка ... чи оголошує шаблон RegEx "екземпляром" або "ініціалізувати" цей шаблон, чи він просто зберігає шаблон, поки це не потрібно?

var NonNumbers = /[^0-9]/g; //"initialized" here?
"h5u4i15h1iu".replace(NonNumbers, "*"); //or "initialized" here?

Може бути RegExp() насправді створює одне і буквальне чекає, поки воно буде використане, хоча обидві моделі повертають однакові результати?

var NonNumbers = /[^0-9]/g; //just stores the pattern
var NonNumbers = RegExp(/[^0-9]/, "g"); //actually creates the RegExp

Просто свербіж, сподіваюся, що хтось, хто розуміє внутрішню роботу, може подряпати.

Відповіді:

2 для відповіді № 1

Від Специфікація Mozilla:

Ви будуєте регулярний вираз одним із двох способів:

Використовуючи регулярний виразний літерал, який складається з шаблону, укладеного між косою рисою, наступним чином:

var re = /ab+c/;

Літерали регулярного виразу забезпечують компіляцію регулярного виразу коли сценарій завантажений. Якщо регулярний вираз залишається постійним, використання цього може покращити продуктивність.

Або виклик функції конструктора об'єкта RegExp таким чином:

var re = new RegExp("ab+c");

Використання функції конструктора забезпечує збір часу виконання регулярного виразу. Використовуйте функцію конструктора, коли знаєте, що закономірний шаблон виразів буде змінюватися, або ви не знаєте шаблону і отримуєте його з іншого джерела, наприклад, із введення користувача.

Оскільки специфікація вказує, що регулярнавираз компілюється при використанні синтаксису буквального значення, також можна припустити, що він ініціалізується як повний, сумлінний регулярний виразний об'єкт у цій точці.

Ще одна перевага використання літералів полягає в тому, щорегулярні вирази можуть бути інтерновані, це означає, що якщо однаковий літеральний регулярний вираз знайдений у декількох місцях, обидва літерали можуть посилатися на один і той же об'єкт, економлячи як пам'ять, так і витрати на ініціалізацію.