Полагам грижи да декларирам 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Конструирате регулярен израз по един от двата начина:
Използване на литерала на регулярния израз, който се състои от шаблон, затворен между наклонени черти, както следва:
var re = /ab+c/;
Литералите за регулярни изрази осигуряват компилация на регулярния израз когато скриптът е зареден, Ако регулярният израз остава постоянен, използването му може да подобри производителността.
Или извиква конструкторната функция на обекта RegExp, както следва:
var re = new RegExp("ab+c");
Използва се функцията конструктор компилация по време на изпълнение на регулярния израз. Използвайте функцията конструктор, когато знаете, че шаблонът на регулярния израз ще се променя, или не познавате модела и го получавате от друг източник, като например въвеждане от потребителя.
Тъй като спецификацията показва, че редовнитеизразът се компилира, когато се използва литералният синтаксис, също така е безопасно да се предположи, че той се инициализира като пълен, добросъвестен обект на регулярния израз в този момент.
Друго предимство на използването на литерали е товаРегулярните изрази могат да бъдат интернирани, което означава, че ако един и същи литерал на регулярния израз се намира на много места, и двата литерала могат да се отнасят за един и същ обект, като се спестяват както памет, така и разходи за инициализация.