⊗jsSpREGL 101 of 294 menu

Greediness-Einschränkung in Regex in JavaScript

Reguläre Ausdrücke sind standardmäßig gierig. Das bedeutet, dass sie die maximal mögliche Anzahl von Zeichen erfassen. Lassen Sie uns das an einem Beispiel erläutern. Angenommen, wir haben folgenden String:

let str = 'aeeex zzz x kkk';

Angenommen, wir möchten in diesem String den Teilstring 'aeeex' nach folgendem Muster finden: Buchstabe 'a', dann ein beliebiges Zeichen ein- oder mehrmals, dann der Buchstabe 'x'.

let res = str.replace(/a.+x/g, '!');

Wir erwarten, dass das Ergebnis in der Variable der String '! zzz x kkk' ist. Allerdings ist das nicht der Fall - in die Variable gelangt der String '! kkk'.

Der Grund liegt darin, dass unser Regex alle Zeichen vom Buchstaben 'a' bis zum Buchstaben 'x' sucht. Aber in unserem String gibt es zwei Buchstaben 'x'! Aufgrund der Gier sucht der Regex bis zum letzten 'x', wodurch er mehr erfasst, als wir erwartet haben.

Natürlich ist dieses Verhalten oft genau das, was wir brauchen. Aber in diesem speziellen Fall möchten wir die Gier deaktivieren und dem Regex sagen, dass er nur bis zum ersten 'x' suchen soll.

Um die Gier einzuschränken, muss nach dem Quantor ein Fragezeichen gesetzt werden:

let res = str.replace(/a.+?x/g, '!');

Die Gier kann bei allen Quantoren eingeschränkt werden: also bei *, ? und {} - so: *?, ?? und {}?.

Gegeben ist der String:

let str = 'aba accca azzza wwwwa';

Schreiben Sie einen regulären Ausdruck, der alle Strings findet, an deren Rändern der Buchstabe 'a' steht, und ersetzt jede davon durch '!'. Zwischen den Buchstaben 'a' kann ein beliebiges Zeichen stehen (außer 'a').

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen