Vai al contenuto
eLearner.app
Modulo 6 · Lezione 3 di 423/32 nel corso~12 min
Lezioni del modulo (3/4)

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

I lookbehind sono la versione speculare dei lookahead: guardano prima della posizione corrente, sempre a larghezza zero.

  • (?<=...) -- lookbehind positivo: prima deve esserci il pattern.
  • (?<!...) -- lookbehind negativo: prima NON deve esserci il pattern.
Code
Pattern: (?<=\$)\d+
Sample:  Costo $100, sconto -25, totale $75.
                ^^^                  ^^

Il $ non e' nel match, ma serve come condizione: matchano solo le cifre precedute dal simbolo del dollaro.

Lookbehind negativo

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

(?<!\w) richiede che prima delle cifre NON ci sia un carattere di parola: abc123 viene escluso (prima del 123 c'e' c, un \w), 456 matcha (prima c'e' uno spazio).

Differenza chiave vs gruppo non-cattura

Code
\\$\\d+         matcha "$100": il match include il dollaro.
(?<=\\$)\\d+    matcha "100":  il match contiene SOLO le cifre.

Se ti serve estrarre il valore "pulito" senza il prefisso, lookbehind e' la scelta giusta.

Compatibilità dei lookbehind in JavaScript

Il lookbehind positivo (?<=...) e negativo (?<!...) consentono di verificare cosa precede la posizione corrente. In JavaScript, sono supportati a partire da ES2018; nei browser più vecchi o in vecchi engine Node.js potevano causare errori di compilazione della regex.

Prova tu

Esercizio#regex.m6.l3.e1
Tentativi: 0Caricamento…

Estrai solo l'importo numerico (senza il simbolo $) dai prezzi del testo.

Caricamento editor…
Mostra suggerimento

Sposta \\$ dentro un lookbehind positivo (?<=\\$): condizione di posizione, non parte del match.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m6.l3.e2
Tentativi: 0Caricamento…

Trova ogni sequenza di cifre NON preceduta da una lettera o cifra (cioe' numeri 'isolati', non parti di codice come `abc123`).

Caricamento editor…
Mostra suggerimento

Usa lookbehind negativo (?<!\\w) per escludere se prima c'e' una lettera o cifra.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m6.l3.e3
Tentativi: 0Caricamento…

Trova solo le cifre dei numeri negativi (cifre precedute dal segno `-`), escludendo il segno meno dal match.

Caricamento editor…
Mostra suggerimento

Sposta il segno meno - all'interno di un lookbehind positivo (?<=-).

Soluzione disponibile dopo 3 tentativi