/ / Quando Javascript "inizializza" un pattern RegEx? - javascript, regex

Quando Javascript "inizializza" un pattern RegEx? - javascript, regex

Mi prendo cura di dichiarare un modello RegEx una volta eriutilizzare se possibile, per motivi di prestazioni. Non sono del tutto sicuro del perché - qualcosa che probabilmente ho letto una volta molti anni fa e che è stato archiviato nella vecchia "spugna del cranio".

Mi trovo in una situazione di regex-pesante e un pensiero si è verificato ... dichiarare un pattern RegEx "istanziare" o "inizializzare" quel pattern, o memorizza il pattern fino a quando non è necessario?

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

Può essere RegExp() crea effettivamente uno e il letterale attende fino a quando non viene utilizzato, anche se entrambi i pattern restituiscono gli stessi risultati?

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

Solo un prurito spero che qualcuno che capisce i meccanismi interni possa graffiare.

risposte:

2 per risposta № 1

Dal Mozilla spec:

Costruisci un'espressione regolare in due modi:

Uso di un'espressione regolare letterale, che consiste in un modello racchiuso tra barre, come segue:

var re = /ab+c/;

I valori letterali di espressioni regolari forniscono la compilazione dell'espressione regolare quando lo script è caricato. Se l'espressione regolare rimane costante, l'utilizzo di questo può migliorare le prestazioni.

O chiamando la funzione di costruzione dell'oggetto RegExp, come segue:

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

L'utilizzo della funzione di costruzione fornisce compilazione runtime dell'espressione regolare. Usa la funzione di costruzione quando sai che il pattern delle espressioni regolari cambierà, o non conosci il pattern e lo stai ricevendo da un'altra fonte, come l'input dell'utente.

Dal momento che la specifica indica che il regolarel'espressione viene compilata quando si utilizza la sintassi letterale, ma si può anche presumere che venga inizializzata come oggetto di espressione regolare completo, in buona fede, a quel punto.

Un altro vantaggio dell'uso di letterali è quellole espressioni regolari possono essere internate, il che significa che se la stessa espressione regolare letterale viene trovata in più punti, entrambi i valori letterali possono riferirsi allo stesso oggetto, risparmiando sia i costi di memoria che di inizializzazione.