Ich habe ein seltsames Problem bei der Arbeit mit der Javascript-Funktion Regexp.exec. Wenn ich die Funktion mehrmals für neue (ich schätze ...) Regexp-Objekte aufrufe, funktioniert sie nur jedes zweite Mal. Ich verstehe nicht, warum überhaupt!
Hier ist ein kleines Beispiel für eine Schleife, die aber dasselbe tut, wenn sie einmal in einer Funktion verwendet und mehrmals aufgerufen wird.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/g).exec('abc'));
}
> 0 ["b", "b"]
> 1 null
> 2 ["b", "b"]
> 3 null
> 4 ["b", "b"]
Wenn Sie das /g entfernen, kehrt es zum normalen Zustand zurück.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/).exec('abc'));
} /* no g ^ */
> 0 ["b", "b"]
> 1 ["b", "b"]
> 2 ["b", "b"]
> 3 ["b", "b"]
> 4 ["b", "b"]
Ich vermute, dass es eine Optimierung gibt, die das Regexp-Objekt speichert, aber es scheint seltsam.
Dieses Verhalten ist bei Chrome 4 und Firefox 3.6 dasselbe, funktioniert aber im IE8 wie erwartet. Ich glaube, das ist beabsichtigt, aber ich kann die Logik darin nicht finden, vielleicht können Sie mir helfen!
Danke