Heim >Web-Frontend >js-Tutorial >Wie kann ich überlappende Übereinstimmungen mit regulären Ausdrücken und dem globalen Flag erhalten?
Überlappender String-Abgleich mit regulären Ausdrücken
Wenn Sie einen regulären Ausdruck mit dem globalen Flag (/g) verwenden, um einen String abzugleichen, können Sie dies tun Es gibt Fälle, in denen überlappende Übereinstimmungen nicht wie erwartet zurückgegeben werden. Beispielsweise ergibt der Abgleich mit /d{3}/g in der Zeichenfolge „12345“ nur den Treffer „123“ anstelle von [„123“, „234“, „345“].
Der Grund denn dieses Verhalten liegt in der Natur des Regex-Abgleichs mit dem globalen Flag. Die Regex-Engine liest und konsumiert die übereinstimmende Teilzeichenfolge und verschiebt ihren Index an die Position, die unmittelbar auf die Übereinstimmung folgt. In diesem Fall verschiebt sich der Index nach dem Abgleich mit „123“ auf Position 4, so dass nur noch „45“ für den nachfolgenden Abgleich übrig bleibt.
Techniken für überlappende Abgleiche
Zu erreichen Für überlappende Übereinstimmungen können mehrere Ansätze verwendet werden:
Zero-Width Behauptungen:
Beispiel (JavaScript mit matchAll):
const re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
Dieser Code verwendet einen positiven Lookahead, um auf alle zu testen Positionen in der Zeichenfolge, die mit drei aufeinanderfolgenden Ziffern übereinstimmen. Das Ergebnis ist ein Array der übereinstimmenden Teilzeichenfolgen, einschließlich ["123", "234", "345"].
Zusätzliche Überlegungen:
Das obige ist der detaillierte Inhalt vonWie kann ich überlappende Übereinstimmungen mit regulären Ausdrücken und dem globalen Flag erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!