Ich kann nicht genau verstehen, wie die JavaScript-Methode string.match (regexp) funktioniert

8

Im Buch "JavaScript: Die guten Teile" erklärt es die Methode string.match(regexp) wie folgt:

  

Die Übereinstimmungsmethode entspricht einer Zeichenfolge und einem regulären Ausdruck. Wie es   hängt das von der g Flagge ab. Wenn es kein g-Flag gibt, dann das   Das Ergebnis des Aufrufs von String .match (regexp) ist identisch mit dem Aufruf von   regexp .exec (Zeichenfolge). Wenn der Regexp jedoch das Flag g hat, dann ist es   erzeugt ein Array aller Übereinstimmungen, schließt jedoch die Erfassung aus   Gruppen:

Dann bietet das Buch Codebeispiel:

%Vor%

Meine Frage ist, dass ich "nicht verstehen kann, aber die einfangenden Gruppen ausschließt".

Im obigen Codebeispiel befindet sich html in </html> in einer Erfassungsgruppe. Und warum ist es immer noch im Ergebnis-Array enthalten?

Und / in </html> befindet sich ebenfalls in einer einfangenden Gruppe. Und warum ist es im Ergebnis-Array enthalten?

Können Sie erklären "aber schließt die einfangenden Gruppen" mit dem obigen Codebeispiel aus?

Vielen Dank!

    
weilou 05.06.2012, 16:42
quelle

2 Antworten

10
  

Im obigen Codebeispiel befindet sich html in einer Erfassungsgruppe. Und warum ist es immer noch im Ergebnis-Array enthalten?

Weil es das vollständige Spiel ist. Wenn er sagt "aber schließt die Capture-Gruppen aus", meint er nicht das komplette Match-Ergebnis, nur dass der Inhalt der Capture-Gruppen nicht im Array wiederholt wird. Wenn die einfangenden Gruppen enthalten wären, würden Sie

sehen %Vor%
  

Und / in der ist auch in einer einfangenden Gruppe. Und warum ist es im Ergebnis-Array enthalten?

Aus dem gleichen Grund wie oben: Es ist Teil der Gesamtübereinstimmung, und das ist, was im Ergebnis ist; die Inhalte der einzelnen Erfassungsgruppen sind nicht.

Dies ist mit einem einfacheren Beispiel leichter zu verstehen. Betrachten Sie diesen Code:

%Vor%

Da der reguläre Ausdruck das g -Flag hat, sind nur die vollständigen Übereinstimmungen im Array enthalten, also sehen wir:

%Vor%

In jedem Fall ist der Eintrag im Array die vollständige Übereinstimmung, die die Zeichen enthält, die in den Erfassungsgruppen übereinstimmen, die den Gesamtausdruck bilden.

Wenn wir die g -Flag entfernt haben, aber nichts anderes geändert haben, erhalten wir die erste vollständige Übereinstimmung gefolgt von den Inhalten der beiden Erfassungsgruppen:

%Vor%

Dort ist der erste Eintrag das vollständige Spiel; dann sind die zweite und dritte der Inhalt der Fanggruppen. Beachten Sie, dass der Inhalt des Capture-Gruops

ist     
T.J. Crowder 05.06.2012, 16:48
quelle
0

Der Modifizierer g dient dazu, die Regex global anzuwenden. Ohne sie passt die Regex und gibt das erste gefundene Match zurück. Mit ihr sucht und vergleicht sie alle Vorkommen in der Zeichenfolge.

    
Crayon Violent 05.06.2012 16:45
quelle