Heim >Web-Frontend >js-Tutorial >Wie kann ich mithilfe regulärer Ausdrücke überlappende Übereinstimmungen in einer Zeichenfolge finden?
Grundlegendes zum überlappenden String-Matching mit Regex
In bestimmten Szenarien stimmt die string#match-Methode mit dem globalen Flag möglicherweise nicht mit überlappenden Sequenzen in überein Eingabezeichenfolge. Betrachten Sie beispielsweise die Zeichenfolge „12345“. Mit dem regulären Ausdruck /d{3}/g erwarten wir drei Übereinstimmungen: ["123", "234", "345"]. Allerdings erhalten wir nur eine einzige Übereinstimmung, „123“.
Das liegt daran, dass die string#match-Methode die übereinstimmenden Zeichen verbraucht (d. h. ihren Index liest und über sie hinausgeht). Daher zeigt der aktuelle Index nach dem Abgleich mit „123“ auf „4“ und die Regex-Engine stoppt, sodass keine weiteren Übereinstimmungen gefunden werden können.
Überlappende Übereinstimmungen mit einer Null-Breite-Behauptung lösen
Um diese Einschränkung zu beseitigen, besteht eine beliebte Technik darin, eine positive Lookahead-Behauptung mit einer einfangenden Gruppe zu verwenden. Dieser Ansatz bestätigt das Vorhandensein eines Teilstrings, ohne ihn tatsächlich zu verbrauchen. Durch wiederholtes Testen aller Positionen in der Eingabezeichenfolge können wir die gewünschten überlappenden Übereinstimmungen erfassen.
var re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]);
In diesem Beispiel erstellen wir einen regulären Ausdruck mit einer positiven Lookahead-Behauptung, der drei aufeinanderfolgende Ziffern erfasst, ohne sie zu verbrauchen. Indem wir die Eingabezeichenfolge mit matchAll durchlaufen, erhalten wir die gewünschte Liste von Übereinstimmungen: ["123", "234", "345"].
Diese Technik wird in verschiedenen Programmiersprachen unterstützt und ermöglicht Entwicklern die Handhabung überlappende String-Matching-Szenarien mit Leichtigkeit.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe regulärer Ausdrücke überlappende Übereinstimmungen in einer Zeichenfolge finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!