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 (?=...) es una aserción de ancho cero (zero-width): comprueba que un determinado patrón siga a la posición actual, pero no consume esos caracteres.

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

El lookahead (?= euro) requiere que los dígitos vayan seguidos de euro, pero el match incluye solo los dígitos. 75 dollari no coincide (no hay euro).

Por qué "ancho cero"

Piensa en el lookahead como una condición sobre la posición, no como una parte del match:

  • El match se detiene antes del lookahead.
  • La posición "después del match" es el inicio del texto inspeccionado por el lookahead.
  • El siguiente intento de coincidencia con la flag g se reanudará desde allí.

Esto lo hace perfecto para extraer valores sin su contexto: precios sin la moneda, palabras antes de un signo de puntuación, etc.

Características del lookahead y escaneo de ancho cero

El lookahead positivo (?=...) garantiza que el patrón especificado sigue al punto actual, pero el escaneo se reanuda desde la posición anterior al lookahead. Esto evita "consumir" partes del texto que podrían ser necesarias para coincidencias posteriores.

Pruébalo tú

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

Extrae SOLO los dígitos de los precios en euros (las secuencias de dígitos seguidas de ' euro'). Sin la moneda en el match.

Cargando editor...
Mostrar pista

Mueve ' euro' dentro de un lookahead (?= euro): la cadena no formará parte del match.

Solución disponible después de 3 intentos

Ejercicio de repaso

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

Encuentra cada palabra seguida inmediatamente por dos puntos `:` (pero sin incluir los dos puntos en el match).

Cargando editor...
Mostrar pista

Misma lógica: los `:` no están en el match, sino que son una condición de posición.

Solución disponible después de 3 intentos

Desafío adicional

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

Encuentra cada palabra (ej. nombre de función) seguida inmediatamente por un paréntesis de apertura `(`, excluyendo el paréntesis del match.

Cargando editor...
Mostrar pista

Mueve \( (paréntesis de apertura escapado) dentro del lookahead positivo (?=...).

Solución disponible después de 3 intentos