Bei Verwendung der g
Flagge auf einem Javascript regulären Ausdruck, wird es verfolgen, wo die letzte Übereinstimmung gefunden wurde und starten Sie von diesem Index suchen Sie das nächste Mal versuchen, eine Übereinstimmung zu finden.
Zwischen den beiden re.test()
Anrufe, werfen Sie einen Blick auf re.lastIndex
, um zu sehen, worüber ich spreche.
Zum Beispiel:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex; // 3
re.test("foo"); // return false
Sie werden feststellen, dass die Art der Anführungszeichen verwenden Sie spielt keine Rolle, re.test('foo'); re.test('foo');
wird das gleiche Verhalten.
Wenn Sie die Regex starten frisch mögen, können Sie entweder die globale Flagge von Ihrem Regex entfernen oder re.lastIndex
-0
nach jedem Versuch gesetzt ein Spiel, zum Beispiel zu finden:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex = 0;
re.test("foo"); // return true
Die Wechselfestgestellt durch Blender in Kommentaren kann erklärt werden, weil lastIndex
automatisch auf 0
gesetzt wird, wenn eine Übereinstimmung fehlschlägt, so dass der nächste Versuch nach dem Fehler erfolgreich sein wird.
Was meinst du mit 'Typ empfindlich'? – Brian
Wenn Sie 're.test ('foo');' weiterlaufen lassen, wechselt es zwischen 'true' und' false'. Das ist ziemlich seltsam. – Blender
Sie haben Recht Blender. Hast du eine Idee warum? – JuSchz