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"]
. 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"]
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"]
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!