Heim > Web-Frontend > js-Tutorial > Wie kann ich überlappende Übereinstimmungen mit regulären Ausdrücken und dem globalen Flag erhalten?

Wie kann ich überlappende Übereinstimmungen mit regulären Ausdrücken und dem globalen Flag erhalten?

Linda Hamilton
Freigeben: 2024-12-13 02:24:16
Original
606 Leute haben es durchsucht

How Can I Get Overlapping Matches with Regular Expressions and the Global Flag?

Ü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:

    • Verwenden Sie einen positiven Lookahead mit einer einfangenden Gruppe, um alle Positionen in der Eingabezeichenfolge zu testen.
    • Erhöhen Sie den RegExp.lastIndex manuell, um Endlosschleifen zu vermeiden.
    • Unterstützt von .NET, Python, PHP, Ruby und Java (unter Verwendung von matchAll).

Beispiel (JavaScript mit matchAll):

const re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]));
Nach dem Login kopieren

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:

  • Null -width-Zusicherungen sind nur anwendbar, wenn Sie überlappende Teilzeichenfolgen abgleichen müssen.
  • Einige Regex-Engines verfügen über integrierte Unterstützung für überlappende Übereinstimmungen (z. B. PCRE in PHP und Ruby).
  • Alternative Ansätze können die Verwendung von Schleifen mit Teilzeichenfolgen oder Teilungsfunktionen umfassen.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage