Überlegen Sie:
%Vor% Warum gibt die dritte Zeile false
zurück? Wenn ich das Flag "g" entferne, wird true
zurückgegeben.
In JavaScript haben Objekte mit regulärem Ausdruck state . Dies ist wichtig, wenn das Flag g
("global") auf sie angewendet wird und manchmal auf ungewöhnliche Weise gilt. Dieser Status ist der Index, in dem die Übereinstimmung zuletzt aufgetreten ist. Dies ist die .lastIndex
-Eigenschaft der Regex. Wenn Sie exec
oder test
erneut für dasselbe Regex-Objekt aufrufen, wird die Stelle wieder aufgerufen, an der sie unterbrochen wurde.
Was in deinem Beispiel passiert, ist für den zweiten Aufruf, es nimmt dort auf, wo es beim letzten Mal aufgehört hat, und so sieht es nach dem 10. Zeichen in der Zeichenkette aus - und findet dort keine Übereinstimmung, weil es keine gibt Text dort überhaupt (und selbst wenn es wäre, würde die ^
Behauptung nicht zusammenpassen).
Wir können sehen, was passiert, wenn wir uns die Eigenschaft lastIndex
anschauen:
Ohne das g
-Flag behält das regex-Objekt keinen Zustand und beginnt jedes Mal am Anfang der Zeichenfolge:
Randnotiz: Im Allgemeinen ist es am besten, reguläre Ausdrücke in JvaScript mit Regex-Literalen zu schreiben, anstatt den RegExp
-Konstruktor und die Strings zu verwenden. In deinem Fall wäre das
Randnotiz 2: Es macht wenig Sinn, einen regulären Ausdruck mit ^
oder $
anchor und mit dem g
-Flag zu definieren, es sei denn, Sie verwenden auch m
(multiline) Flag, um zu ändern, was diese Anker bedeuten. Ohne m
meinen sie "Anfang ( ^
) oder Ende ( $
) der Eingabe". Mit dem m
Flag bedeuten sie "Anfang ( ^
) oder Ende ( $
) von Zeile ."
Tags und Links javascript regex