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.
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
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
\\$\\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
Estrai solo l'importo numerico (senza il simbolo $) dai prezzi del testo.
Mostra suggerimento
Sposta \\$ dentro un lookbehind positivo (?<=\\$): condizione di posizione, non parte del match.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Trova ogni sequenza di cifre NON preceduta da una lettera o cifra (cioe' numeri 'isolati', non parti di codice come `abc123`).
Mostra suggerimento
Usa lookbehind negativo (?<!\\w) per escludere se prima c'e' una lettera o cifra.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Trova solo le cifre dei numeri negativi (cifre precedute dal segno `-`), escludendo il segno meno dal match.
Mostra suggerimento
Sposta il segno meno - all'interno di un lookbehind positivo (?<=-).
Soluzione disponibile dopo 3 tentativi