Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 1 von 421/32 im Kurs~10 min
Lektionen des Moduls (1/4)

Positives Lookahead: `(?=...)`

Ein positives Lookahead (?=...) ist eine Zusicherung mit der Breite Null (zero-width): Es prüft, ob ein bestimmtes Muster auf die aktuelle Position folgt, konsumiert aber keine Zeichen.

Code
Pattern: \d+(?= euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                ^^^                 ^^

Das Lookahead (?= euro) erfordert, dass auf die Ziffern euro folgt, aber der Treffer enthält nur die Ziffern. 75 dollari matcht nicht (kein euro).

Warum "Breite Null"

Stelle dir das Lookahead als eine Bedingung für die Position vor, nicht als Teil des Treffers:

  • Der Treffer stoppt vor dem Lookahead.
  • Die Position "nach dem Treffer" ist der Anfang des Textes, der vom Lookahead überprüft wird.
  • Der nächste Matching-Versuch mit dem Flag g wird dort fortgesetzt.

Dies macht es perfekt, um Werte ohne ihren Kontext zu extrahieren: Preise ohne Währung, Wörter vor einem Satzzeichen und so weiter.

Lookahead-Funktionen und Scan mit Breite Null

Das positive Lookahead (?=...) garantiert, dass das angegebene Muster auf den aktuellen Punkt folgt, aber der Scan wird an der Position vor dem Lookahead fortgesetzt. Dies verhindert das "Konsumieren" von Textteilen, die für nachfolgende Treffer benötigt werden könnten.

Probiere es aus

Übung#regex.m6.l1.e1
Versuche: 0Wird geladen…

Extrahiere NUR die Ziffern der Euro-Preise (die Ziffernfolgen, auf die ' euro' folgt). Keine Währung im Treffer.

Editor wird geladen…
Hinweis anzeigen

Verschiebe ' euro' in ein Lookahead (?= euro): Der String wird nicht Teil des Treffers sein.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#regex.m6.l1.e2
Versuche: 0Wird geladen…

Finde jedes Wort, auf das unmittelbar ein Doppelpunkt `:` folgt (jedoch ohne den Doppelpunkt in den Treffer aufzunehmen).

Editor wird geladen…
Hinweis anzeigen

Gleiche Logik: Der Doppelpunkt `:` ist nicht im Treffer, sondern eine Positionsbedingung.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#regex.m6.l1.e3
Versuche: 0Wird geladen…

Finde jedes Wort (z. B. Funktionsname), auf das unmittelbar eine öffnende Klammer `(` folgt, und schließe die Klammer aus dem Treffer aus.

Editor wird geladen…
Hinweis anzeigen

Verschiebe \( (maskierte öffnende Klammer) in das positive Lookahead (?=...).

Lösung nach 3 Versuchen verfügbar