2015-03-07 21 views

risposta

6

suo perché della bandiera g. Comincia a ricordare l'ultimo indice della partita e quando fai la prossima volta il r.test, inizia da quell'indice. Ecco perché si alterna tra true e false. Prova questo

var r = /e/gi; 
console.log(r.test('e')); 
# true 
console.log(r.lastIndex); 
# 1 
console.log(r.test('e')); 
# false 
console.log(r.lastIndex); 
# 0 
console.log(r.test('e')); 
# true 
console.log(r.lastIndex); 
# 1 
console.log(r.test('e')); 
# false 

Citando MDN documentazione su RegExp.lastIndex,

Il lastIndex è una struttura intero di lettura/scrittura di espressioni regolari che specifica l'indice a cui iniziare la prossima partita. ...

Questa proprietà viene impostata solo se l'espressione regolare utilizza il flag "g" per indicare una ricerca globale. Valgono le seguenti regole:

  1. Se lastIndex è maggiore della lunghezza della stringa, test() e exec() sicuro, quindi lastIndex è impostato a 0.
  2. Se lastIndex è uguale alla lunghezza della stringa e se la l'espressione regolare corrisponde alla stringa vuota, quindi l'espressione regolare corrisponde all'ingresso a partire da lastIndex.
  3. Se lastIndex è uguale alla lunghezza della stringa e se l'espressione regolare non corrisponde alla stringa vuota, allora il regolare ingresso disallineamenti di espressione, e lastIndex viene resettato a 0.
  4. Altrimenti, lastIndex è impostato la prossima posizione dopo la partita più recente.

Il testo in grassetto sopra risponde al comportamento osservato. Dopo la prima partita, e, lo lastIndex è impostato su 1, per indicare l'indice da cui provare la prossima corrispondenza. Secondo il terzo punto visto sopra, poiché il lastIndex è uguale alla lunghezza della stringa e l'espressione regolare non corrisponde alla stringa vuota, restituisce false e ripristina lastIndex a 0.

Problemi correlati