Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung der Gruppierung in regulären Javascript-Ausdrücken
Ich habe zuvor einen Artikel über den Einstieg in reguläre Ausdrücke geschrieben, aber heute bin ich auf eine weitere Gefahr gestoßen. Heute werde ich mich auf das Teilen konzentrieren Javascript mit Ihnen. Gruppierung in regulären Ausdrücken. Wenn Sie die regulären JS-Ausdrücke nicht ausreichend verstehen, können Sie hier klicken, um mehr zu erfahren.
Gruppierung wird häufig in regulären Ausdrücken verwendet. Die Gruppierung ist ein Klammerpaar (). Jedes Klammerpaar stellt eine Gruppierung dar.
Erfassende Gruppierung wird in Dingen wie Match Exec verwendet. In der Funktion wird die entsprechende Gruppierung verwendet Die Ergebnisse werden in Form des zweiten Items und des dritten Items erhalten. Schauen wir uns zunächst ein Beispiel an
var reg = /test(\d+)/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "001", index: 4, input: "new test001 test002"](d+) im Code ist eine Gruppe (manche Leute nennen es auch ein Untermuster), aber alles bedeutet die gleiche Bedeutung, Im obigen Beispiel ist test001 das genaue Übereinstimmungsergebnis
. Beim gruppierten Abgleich werden jedoch die Zeichen gefunden, die mit dem Untermuster d+ aus dem gesamten genauen Übereinstimmungsergebnis (d. h. test001) übereinstimmen, was offensichtlich 001 ist .
Aber die Situation, auf die ich heute gestoßen bin, ist wie folgt
var reg = /test(\d)+/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "1", index: 4, input: "new test001 test002"]Der Unterschied besteht darin, dass (d+) in (d)+ geändert wird, das gesamte Übereinstimmungsergebnis ist immer noch test001, aber das Ergebnis der ersten Gruppe ist anders.
Lassen Sie uns ihre Unterschiede langsam analysieren
alle d+, das übereinstimmende Ergebnis ist 001. Dann wird außen ein Klammerpaar hinzugefügt, das eine Gruppe darstellt, sodass das übereinstimmende Ergebnis in der ersten Gruppe 001 ist.
Schauen wir uns das zweite Beispiel (d)+ an in ist auch ein gieriges Muster. Es wird zuerst mit 0 übereinstimmen, dann mit 1 und am Ende mit 1. Es wird auch bis zum Ende des Spiels übereinstimmen. In diesem Beispiel gibt es keinen Unterschied in der Übereinstimmung, aber die Gruppierung (d) bedeutet hier eine Übereinstimmung mit einer einzelnen Zahl
Nach meinem bisherigen Verständnis entspricht sie dem ersten übereinstimmenden Ergebnis, das 0 ist . Aber dieses Verständnis ist falsch. Da es sich beim gesamten Matching um einen gierigen Modus handelt, wird durch das Abgleichen möglichst vieler (d) in der Gruppe
das letzte übereinstimmende Ergebnis 1
var reg = /test(\d)+?/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "0", index: 4, input: "new test001 test002"]Nicht erfassende Gruppierung bedeutet, dass an einigen Stellen ein Paar Klammern erforderlich ist, aber Sie Ich möchte nicht, dass es zu einer Capture-Gruppe wird. Gruppierung bedeutet, dass diese Gruppe nicht von Funktionen wie macth exec übernommen werden soll. Fügen Sie normalerweise ?: vor den Klammern hinzu, d. h. (?:pattern ), was zu einer nicht erfassenden Gruppierung wird.
var reg = /test(?:\d)+/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", index: 4, input: "new test001 test002"]
Auf diese Weise wird der gruppierte übereinstimmende Inhalt nicht im Übereinstimmungsergebnis angezeigt, d. h. das zweite Element 1 fehlt
Dieser Artikel konzentriert sich auf (d+) und (d) Der Unterschied zwischen + ist auch die Falle, in die ich heute geraten bin. Wenn es Fehler gibt, korrigieren Sie mich bitte.
Ausführlichere Erläuterungen zur Gruppierung in regulären Javascript-Ausdrücken und verwandte Artikel finden Sie auf der chinesischen PHP-Website!