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

Lookahead negativo: `(?!...)`

El lookahead negativo (?!...) es el hermano oscuro del lookahead positivo: requiere que el patrón dado NO siga a la posición actual. Sigue siendo de ancho cero: no se consume ningún carácter.

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

Solo coincide 75, porque es la única secuencia de dígitos que NO va seguida de euro. Los dígitos 100 y 25 van seguidos de euro y quedan excluidos.

Patrones típicos de lookahead negativo

  • ^(?!.*errore).*$ -- una línea que NO contiene la palabra "errore".
  • \b(?!the\b)\w+\b -- una palabra que no sea the.
  • (?!\s) -- la posición actual NO es un espacio en blanco (útil como "trim").
Code
Pattern: ^(?!.*\.bak$).*$
Sample (multiline con flag m):
  foto.jpg
  backup.bak
  documento.txt
Match: foto.jpg, documento.txt (excluye backup.bak)

Exclusiones avanzadas mediante lookahead negativo

El lookahead negativo (?!...) es esencial para implementar lógica de exclusión (como verificar que una contraseña no contenga palabras del diccionario o que un identificador no sea una palabra clave reservada como class o function).

Pruébalo tú

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

Encuentra cada número que NO vaya seguido de ' euro' (excluyendo así los precios en euros).

Cargando editor...
Mostrar pista

Usa (?! ...) para decir 'no debe seguir'. La secuencia ` euro` no debe aparecer después.

Solución disponible después de 3 intentos

Ejercicio de repaso

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

Encuentra cada palabra de al menos 3 letras que NO sea 'the' (case-insensitive).

Cargando editor...
Mostrar pista

Justo después de \b abre un lookahead negativo (?!the\b) que excluya únicamente la palabra the.

Solución disponible después de 3 intentos

Desafío adicional

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

Encuentra todas las palabras formadas por letras que no contengan la letra `x` en ninguna posición (ej. coincide con `test`, `game` pero no con `extra`, `box`).

Cargando editor...
Mostrar pista

Usa un lookahead negativo (?!\w*x) justo después del límite de palabra \b.

Solución disponible después de 3 intentos