E 'un regular expression literal, simile ad usare return new RegExp('^(\\d{4}|\\d{6})$').test(pin)
La parte "letterale" implica che è un modo per rappresentare un tipo di dati specifico come una stringa nel codice — come true
e 'true'
sono diversi, in quanto uno è un valore letterale booleano e l'altro è un valore letterale stringa.
In particolare, l'espressione regolare ^(\d{4}|\d{6})$
rompe a:
^ a string that starts with...
( either
\d a digit (0-9)...
{4} that repeats four times...
| or
\d a digit (0-9)...
{6} that repeats six times...
)
$ and then ends
Quindi: '1234'
, '123456'
, ecc sarebbe partita. '123.00'
, '12345'
, 'abc123'
, ' 1234'
, ' 1234 '
non corrispondono.
Come notato da molti altri nei commenti sul Draco18s' answer ci sono diverse sfumature di essere a conoscenza di con l'utilizzo di letterali regex in JS:
La sintassi letterale non richiede di sfuggire caratteri speciali all'interno del modello regex. L'utilizzo del costruttore RegExp richiede che tu rappresenti il modello come una stringa, che a sua volta richiede l'escaping. Notare le differenze tra \
tra le due sintassi.
L'utilizzo di una regex letterale considera la regex come una costante, mentre l'utilizzo di new RegExp()
lascia a voi la gestione del ciclo di vita dell'istanza di espressioni regolari.
La notazione letterale è compilata e implica una regex costante, mentre la versione del costruttore viene riprodotta dalla stringa, quindi il letterale è ottimizzato/memorizzato nella cache.jsperf.com/regexp-literal-vs-constructor/4 Nota: è possibile ottenere praticamente lo stesso effetto mettendo in cache la nuova Regex in una variabile, ma quello letterale viene memorizzato nella cache al passo JIT - user120242
In altre parole, usando un letterale regex può evitare potenziali insidie di performance :
Esempio:
for (var i = 0; i < 1000; i++) {
// Instantiates 1x Regex per iteration
var constructed = new RegExp('^(\\d{4}|\\d{6})$')
// Instantiates 1 Regex
var literal = /^(\d{4}|\d{6})$/
}
espressioni regolari (regex) validazione in JavaScript ... –
[MDN: 'RegExp.p rototype.test'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test) – Bergi
@sysk L'intento dell'originale è più chiaro (anche se effettivamente equivalente). E "l'efficienza" in questo contesto è sciocca ... anche se i paren hanno fatto la differenza, non stai corrispondendo a gigabyte di PIN. – alexis