/ / Кога 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");

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

Тъй като спецификацията показва, че редовнитеизразът се компилира, когато се използва литералният синтаксис, също така е безопасно да се предположи, че той се инициализира като пълен, добросъвестен обект на регулярния израз в този момент.

Друго предимство на използването на литерали е товаРегулярните изрази могат да бъдат интернирани, което означава, че ако един и същи литерал на регулярния израз се намира на много места, и двата литерала могат да се отнасят за един и същ обект, като се спестяват както памет, така и разходи за инициализация.