Heim >Web-Frontend >js-Tutorial >Warum findet die Methode „match()' von JavaScript nur nicht überlappende Übereinstimmungen mit regulären Ausdrücken?
In regulären Ausdrücken gleicht die Match-Methode mit dem g-Flag (global) normalerweise nur nicht überlappende Teilzeichenfolgen ab und erfasst sie. Betrachten Sie das folgende Beispiel:
const text = "12345"; const regex = /\d{3}/g; const matches = text.match(regex);
In diesem Fall würden wir drei Übereinstimmungen erwarten: „123“, „234“ und „345“. Mit der Match-Methode erhalten wir jedoch nur „123“.
Die Match-Methode verbraucht den übereinstimmenden Teilstring und erhöht seinen Index. Nach der Erfassung von „123“ ist der Index nun über das dritte Zeichen hinaus, so dass nur noch „45“ für eine mögliche Übereinstimmung übrig bleibt. Da dieser verbleibende Teil nicht dem d{3}-Muster entspricht, werden keine weiteren Übereinstimmungen gefunden.
Um überlappende Übereinstimmungen zu erfassen, müssen wir in einigen Fällen eine andere Technik verwenden Regex-Varianten wie .Net, Python, PHP und Ruby. Bei dieser Technik wird eine Assertion mit der Breite Null (positiver Lookahead mit einer einfangenden Gruppe) verwendet, um alle Positionen innerhalb der Eingabezeichenfolge zu testen. Die RegExp.lastIndex-Eigenschaft wird manuell erhöht, um ohne Endlosschleife durch die Zeichenfolge zu gelangen.
Zum Beispiel mit der Methode matchAll:
const re = /(?=(\d{3}))/g; const matches = Array.from('12345'.matchAll(re)); console.log(matches.map(match => match[1])); // ["123", "234", "345"]
Dieser Ansatz erfasst alle drei überlappenden Übereinstimmungen wie gewünscht. Denken Sie daran, dass die Technik nur in bestimmten Regex-Varianten unterstützt wird.
Das obige ist der detaillierte Inhalt vonWarum findet die Methode „match()' von JavaScript nur nicht überlappende Übereinstimmungen mit regulären Ausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!