Regulärer Ausdruck mit Javascript

9

Ich habe folgenden Code in Java-Skript

%Vor%

Bitte führen Sie es in Ihrer Browser-Konsole aus. Es werden die alternativen Übereinstimmungen und Nicht übereinstimmende gedruckt. Kann jemand den Grund dafür erklären.

    
Workonphp 31.01.2013, 03:53
quelle

4 Antworten

4

Nach dem Aufruf von test in einer Zeichenfolge wird der lastIndex -Zeiger nach der Übereinstimmung gesetzt.

%Vor%

und wenn es ans Ende kommt, wird der Zeiger auf den Anfang der Zeichenfolge zurückgesetzt.

Sie können '$ A1 $ A1' versuchen, das Ergebnis wird

sein %Vor%

Dieses Verhalten ist in 15.10.6.2, ECMAScript Language Spec .

  

Schritt 11. Wenn global stimmt,   ein. Rufen Sie die interne Methode [[Put]] von R mit den Argumenten " lastIndex ", e und true auf.

    
Haocheng 31.01.2013, 03:58
quelle
1

Ich habe Ihren Code auf ein einfaches Beispiel reduziert:

%Vor%

Dies passiert nur mit globalen regulären Ausdrücken!

Aus der MDN-Dokumentation zu .test() :

  

Wie bei exec (oder in Kombination damit), ruft test , das mehrere Male für dieselbe Instanz des globalen regulären Ausdrucks aufgerufen wird, die vorherige Übereinstimmung auf.

    
Ja͢ck 31.01.2013 04:46
quelle
0

Dies liegt daran, dass Sie das globale Flag g verwenden. Jedes Mal, wenn Sie .test aufgerufen haben, wird die .lastIndex -Eigenschaft des Regex-Objekts aktualisiert.

Wenn Sie das Flag g nicht verwenden, können Sie das andere Ergebnis sehen.

    
xdazz 31.01.2013 04:03
quelle
0

Das 'g' in Zeile 1 ist nicht korrekt, Sie führen hier keine Ersetzung durch, sondern eine Übereinstimmung, entfernen Sie sie und Sie erhalten Ihr erwartetes Verhalten.

var regexp = / \ $ [A-Z] + [0-9] + / g; sollte sein: var regexp = / \ $ [A-Z] + [0-9] + /

    
ilan berci 31.01.2013 04:04
quelle

Tags und Links