2016-07-23 7 views
1

Rückkehr Beispiel unten sehen Sie und mich korrigieren, wenn ich es falsch mache,Javascript Regex nicht korrekte Ergebnisse

let _regex = new RegExp("L", "gi"); 
 
var strings = ["List", "List Items", "List attachments"]; 
 
for (let i = 0; i < strings.length; i++) { 
 
    if (_regex.test(strings[i])) { 
 
    console.log(strings[i]); 
 
    } 
 
}

Erwartetes Ergebnis ist: alle 3 Ergebnisse Aber Protokolle nur zwei Liste und Listenanhänge

Antwort

3

Reguläre Ausdrücke sind veränderbare Objekte. Die test-Methode mutiert die lastIndex-Eigenschaft. Wenn dies der Fall ist, wird der erste Index bereits überprüft, sodass das zweite Element im Array diesen Index nicht überprüft. Da zu diesem Zeitpunkt nichts gefunden wird, wird der Index auf Null zurückgesetzt, deshalb funktioniert auch der letzte Punkt. Sie können bei jedem Schritt den Index zurück:

for (let i = 0; i < strings.length; i++) { 
    _regex.lastIndex = 0; // reset index 
    if (_regex.test(strings[i])) { 
    console.log(strings[i]); 
    } 
} 

Oder benutzen Sie einfach einen regulären Ausdruck wörtlichen:

for (let i = 0; i < strings.length; i++) { 
    if (/L/gi.test(strings[i])) { 
    console.log(strings[i]); 
    } 
} 
+0

Thank you so much ... @elclanrs –

Verwandte Themen