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ć.
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
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
\$\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
Wyodrębnij z tekstu same kwoty numeryczne (bez znaku $) z cen.
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
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`).
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
Znajdź tylko cyfry liczb ujemnych (cyfry poprzedzone znakiem `-`), wykluczając znak minus z dopasowania.
Pokaż wskazówkę
Przenieś znak minus - do wewnątrz pozytywnego lookbehind (?<=-).
Rozwiązanie dostępne po 3 próbach