Ich habe zuvor einen Artikel über den Einstieg mit regulären Ausdrücken geschrieben. Ich dachte, ich wäre relativ mit regelmäßigen Ausdrücken vertraut, aber heute habe ich einen weiteren Fall getroffen. Vielleicht lag es daran, dass ich nicht vorsichtig genug war. Heute werde ich mich darauf konzentrieren, die Gruppierung in den regulären Ausdrücken von JavaScript mit Ihnen zu teilen. Wenn Sie die regulären Ausdrücke von JS nicht genug verstehen, können Sie hier klicken, um mehr zu erfahren.
Die Gruppierung ist in regulären Regeln sehr weit verbreitet. Die Gruppierung, die ich verstehe, ist ein Paar Klammern (), und jedes Paar Klammern repräsentiert eine Gruppe.
Gruppierung kann unterteilt werden in:
Die Erfassung der Gruppierung wird die Ergebnisse der entsprechenden Gruppierung in Form eines zweiten Terms und eines dritten Terms in einer Funktion wie Match Exec erhalten. Schauen wir uns zuerst ein Beispiel an
var reg =/test (/d+)/; var str = 'neuer Test001 Test002'; console.log (str.match (reg)); // ["test001", "001", Index: 4, Eingabe: "New Test001 Test002"]
Im Code (/d+) befindet sich eine Gruppe (einige Leute nennen es auch Sub-Muster), aber alle repräsentieren die gleiche Bedeutung. Im obigen Beispiel ist Test001 das Ergebnis der genauen Übereinstimmung.
Das Matching der Gruppe besteht jedoch darin, Zeichen zu finden, die mit dem Subpattern/D+ aus dem gesamten exakten Übereinstimmungsergebnis übereinstimmen (dh Test001). Hier ist es offensichtlich 001.
Aber das habe ich heute begegnet
var reg =/test (/d)+/; var str = 'neuer Test001 Test002'; console.log (str.match (reg)); // ["test001", "1", Index: 4, Eingabe: "New Test001 Test002"]
Der Unterschied besteht darin, dass (/d+) in (/d)+geändert wird und das gesamte Matching -Ergebnis immer noch Test001 ist, aber das Ergebnis der ersten Gruppenübereinstimmung ist unterschiedlich.
Schauen wir uns ihre Unterschiede an
(/d+) Dies ist eine Gruppierungssituation, da die Matching -Muster standardmäßig gierige Muster sind, dh so viele Übereinstimmungen wie möglich
Das Ergebnis aller /D+ -Matches ist 001. Dann wird ein Paar Klammern draußen hinzugefügt, was eine Gruppe bedeutet, sodass das Ergebnis der Übereinstimmung in der ersten Gruppe 001 ist.
Schauen wir uns (/d)+ im zweiten Beispiel an. Dies ist auch ein gieriges Muster. Zuerst stimmt es zuerst mit 0 und dann 0 überein und stimmt auch mit dem Ende von 1 überein.
Es scheint, dass es im ersten Beispiel keinen Unterschied zum Match gibt, aber die Gruppierung (/d) bedeutet hier, eine einzelne Zahl zu entsprechen.
Nach meinem vorherigen Verständnis betrug das Ergebnis, dass das Spiel zu Beginn 0 war, 0, aber dieses Verständnis ist falsch. Da das gesamte Match ein gieriges Muster ist, passen Sie so weit wie möglich überein
(/d) In der Gruppe wird das zuletzt übereinstimmende Ergebnis 1 erfassen
Wenn es sich um ein Nicht-Greedy-Muster handelt, passt es so wenig wie möglich überein
var reg =/test (/d)+?/; var str = 'neuer Test001 Test002'; console.log (str.match (reg)); // ["test001", "0", Index: 4, Eingabe: "Neue Test001 Test002"]
Auf diese Weise beträgt das Matching -Ergebnis (/d) 0. Obwohl es immer noch Ergebnisse gibt, die später übereinstimmen können
Nicht-Kauf-Gruppierung
var reg =/test (?:/d)+/; var str = 'neuer Test001 Test002'; console.log (str.match (reg)); // ["test001", Index: 4, Eingabe: "Neue Test001 test002"]
Eine nicht kaufmännische Gruppierung bedeutet, dass an einigen Stellen ein Paar Klammern benötigt wird, aber sie möchten nicht, dass es sich um eine Erfassungsgruppierung handelt, was bedeutet, dass diese Gruppe nicht von Funktionen wie Macth Exec erhalten wird.
Normalerweise wird hinzuzufügen?
Auf diese Weise gibt es im Match -Ergebnis des Spiels keinen Inhaltsübereinstimmung, was bedeutet, dass der zweite Element fehlt.
Dieser Artikel konzentriert sich darauf, den Unterschied zwischen (/d+) und (/d)+zu erklären, der auch die Grube ist, auf die ich heute getreten bin. Wenn es Fehler gibt, können Sie sie gerne korrigieren.