Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 1 z 421/32 w kursie~10 min
Lekcje modułu (1/4)

Dodatnie lookahead: `(?=...)`

Pozytywne lookahead (?=...) (wybieganie w przód) to asercja o zerowej szerokości (zero-width): sprawdza, czy określony wzorzec występuje po bieżącej pozycji, ale nie konsumuje tych znaków.

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

Lookahead (?= euro) wymaga, aby po cyfrach następowało euro, ale dopasowanie obejmuje tylko cyfry. 75 dollari nie pasuje (brak euro).

Dlaczego "zerowa szerokość"

Pomyśl o lookahead jak o warunku dotyczącym pozycji, a nie jak o części dopasowania:

  • Dopasowanie zatrzymuje się przed lookahead.
  • Pozycja "po dopasowaniu" to początek tekstu sprawdzanego przez lookahead.
  • Kolejna próba dopasowania z flagą g rozpocznie się od tego miejsca.

Dzięki temu idealnie nadaje się do wyodrębniania wartości bez ich kontekstu: cen bez waluty, słów przed znakiem interpunkcyjnym itp.

Funkcje lookahead i skanowanie o zerowej szerokości

Pozytywne lookahead (?=...) gwarantuje, że określony wzorzec występuje po bieżącym punkcie, ale skanowanie jest wznawiane od pozycji przed lookahead. Zapobiega to "konsumowaniu" części tekstu, które mogą być potrzebne do kolejnych dopasowań.

Spróbuj sam

Ćwiczenie#regex.m6.l1.e1
Próby: 0Ładowanie...

Wyodrębnij TYLKO cyfry cen w euro (sekwencje cyfr, po których następuje ' euro'). Brak waluty w dopasowaniu.

Ładowanie edytora...
Pokaż wskazówkę

Przenieś ' euro' do wewnątrz lookahead (?= euro): ciąg znaków nie będzie częścią dopasowania.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m6.l1.e2
Próby: 0Ładowanie...

Znajdź każde słowo, po którym bezpośrednio następuje dwukropek `:` (ale bez uwzględniania dwukropka w dopasowaniu).

Ładowanie edytora...
Pokaż wskazówkę

Ta sama logika: `:` nie znajduje się w dopasowaniu, ale jest warunkiem pozycji.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m6.l1.e3
Próby: 0Ładowanie...

Znajdź każde słowo (np. nazwę funkcji), po którym bezpośrednio następuje nawias otwierający `(`, wykluczając nawias z dopasowania.

Ładowanie edytora...
Pokaż wskazówkę

Przenieś \( (escapowany nawias otwierający) do wewnątrz pozytywnego lookahead (?=...).

Rozwiązanie dostępne po 3 próbach