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

Lookbehind: `(?<=...)` `(?<!...)`

Lookbehind (wyszukiwanie wstecz) to lustrzane odbicie lookahead: patrzy za (przed) bieżącą pozycję, zachowując zerową szerokość.

  • (?<=...) -- pozytywne lookbehind: wzorzec musi poprzedzać.
  • (?<!...) -- negatywne lookbehind: wzorzec NIE może poprzedzać.
Code
Pattern: (?<=\$)\d+
Sample:  Costo $100, sconto -25, totale $75.
                ^^^                  ^^

Znak $ nie znajduje się w dopasowaniu, ale działa jako warunek: dopasowywane są tylko te cyfry, które są poprzedzone znakiem dolara.

Negatywne lookbehind

Code
Pattern: (?<!\w)\d+
Sample:  Codice abc123 e numero 456.
                              ^^^

(?<!\w) wymaga, aby przed cyframi NIE znajdował się znak słowa: abc123 jest wykluczone (przed 123 jest c, czyli \w), natomiast 456 pasuje (przed nim znajduje się spacja).

Kluczowa różnica w stosunku do grupy nieprzechwytującej

Code
\$\d+         dopasowuje "$100": dopasowanie zawiera znak dolara.
(?<=\$)\d+    dopasowuje "100": dopasowanie zawiera TYLKO cyfry.

Jeśli chcesz wyodrębnić samą wartość bez prefiksu, lookbehind jest właściwym wyborem.

Kompatybilność lookbehind w JavaScript

Pozytywne lookbehind (?<=...) i negatywne lookbehind (?<!...) sprawdzają, co poprzedza bieżącą pozycję. W języku JavaScript są one obsługiwane począwszy od wersji ES2018; w starszych przeglądarkach lub starszych silnikach Node.js mogłyby powodować błędy kompilacji składni.

Spróbuj sam

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

Wyodrębnij z tekstu same kwoty numeryczne (bez znaku $) z cen.

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

Przenieś \$ do wewnątrz pozytywnego lookbehind (?<=\$): to warunek pozycji, a nie część dopasowania.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

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

Znajdź każdą sekwencję cyfr, która NIE jest poprzedzona literą ani cyfrą (czyli liczby 'izolowane', niebędące częścią kodów takich jak `abc123`).

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

Użyj negatywnego lookbehind (?<!\w), aby wykluczyć przypadki, gdy przed liczbą stoi litera lub cyfra.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

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

Znajdź tylko cyfry liczb ujemnych (cyfry poprzedzone znakiem `-`), wykluczając znak minus z dopasowania.

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

Przenieś znak minus - do wewnątrz pozytywnego lookbehind (?<=-).

Rozwiązanie dostępne po 3 próbach