Saltar al contenido principal
eLearner.app
Módulo 6 · Lección 1 de 421/32 en el curso~10 min
Lecciones del módulo (1/4)

Lookahead positivo: `(?=...)`

Un lookahead positivo (?=...) e' un'asserzione a larghezza zero: verifica che dopo la posizione corrente segua un certo pattern, ma non consuma quei caratteri.

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

Il lookahead (?= euro) richiede che dopo le cifre ci sia euro, ma il match include solo le cifre. 75 dollari non matcha (manca euro).

Perche' "larghezza zero"

Pensa al lookahead come a una condizione sulla posizione, non come a un pezzo del match:

  • Il match si ferma prima del lookahead.
  • La posizione "dopo il match" e' l'inizio del testo guardato dal lookahead.
  • Il prossimo tentativo di match con flag g ripartira' da li'.

Questo lo rende perfetto per estrarre valori senza il contesto: prezzi senza la valuta, parole prima di una punteggiatura, ecc.

Caratteristiche dei lookahead ed avanzamento zero

Il lookahead positivo (?=...) garantisce che il pattern specificato segua il punto corrente, ma la scansione del testo riparte dalla posizione antecedente al lookahead. Questo previene il "consumo" di parti del testo che potrebbero servire per match successivi.

Prova tu

Ejercicio#regex.m6.l1.e1
Intentos: 0Cargando...

Estrai SOLO le cifre dei prezzi in euro (le sequenze di numeri seguite da ' euro'). Niente valuta nel match.

Cargando editor...
Mostrar pista

Sposta ' euro' dentro un lookahead (?= euro): la stringa non sara' parte del match.

Solución disponible después de 3 intentos

Esercizio di ripasso

Ejercicio#regex.m6.l1.e2
Intentos: 0Cargando...

Trova ogni parola immediatamente seguita da due punti `:` (ma senza includere i due punti nel match).

Cargando editor...
Mostrar pista

Stessa logica: il `:` non e' nel match, ma e' una condizione di posizione.

Solución disponible después de 3 intentos

Sfida aggiuntiva

Ejercicio#regex.m6.l1.e3
Intentos: 0Cargando...

Trova ogni nome di parola (es. nome di funzione) seguito immediatamente da una parentesi tonda aperta `(`, escludendo la parentesi dal match.

Cargando editor...
Mostrar pista

Sposta \( (parentesi tonda aperta escapata) all'interno del lookahead positivo (?=...).

Solución disponible después de 3 intentos