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

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

Los lookbehinds (búsqueda hacia atrás) son el reflejo de los lookaheads: miran detrás de la posición actual, y también son de ancho cero.

  • (?<=...) -- lookbehind positivo: el patrón debe preceder.
  • (?<!...) -- lookbehind negativo: el patrón NO debe preceder.
Code
Pattern: (?<=\$)\d+
Sample:  Costo $100, sconto -25, totale $75.
                ^^^                  ^^

El $ no forma parte del match, pero funciona como una condición: solo coinciden los dígitos precedidos por el signo de dólar.

Lookbehind negativo

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

(?<!\w) requiere que antes de los dígitos NO haya un carácter de palabra: abc123 queda excluido (antes de 123 está c, un \w), 456 coincide (antes hay un espacio).

Diferencia clave frente a un grupo no capturador

Code
\$\d+         coincide con "$100": el match incluye el signo de dólar.
(?<=\$)\d+    coincide con "100": el match contiene ÚNICAMENTE los dígitos.

Si necesitas extraer el valor "limpio" sin el prefijo, el lookbehind es la elección correcta.

Compatibilidad de lookbehind en JavaScript

El lookbehind positivo (?<=...) y el negativo (?<!...) comprueban lo que precede a la posición actual. En JavaScript, son compatibles a partir de ES2018; en navegadores antiguos o motores Node.js heredados, causarían errores de compilación de sintaxis.

Pruébalo tú

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

Extrae solo el importe numérico (sin el signo $) de los precios en el texto.

Cargando editor...
Mostrar pista

Mueve \$ dentro de un lookbehind positivo (?<=\$): una condición de posición, no parte del match.

Solución disponible después de 3 intentos

Ejercicio de repaso

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

Encuentra cada secuencia de dígitos NO precedida por una letra o dígito (es decir, números 'aislados', no partes de un código como `abc123`).

Cargando editor...
Mostrar pista

Usa un lookbehind negativo (?<!\w) para excluir cuando haya una letra o dígito antes.

Solución disponible después de 3 intentos

Desafío adicional

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

Encuentra solo los dígitos de los números negativos (dígitos precedidos por el signo `-`), excluyendo el signo menos del match.

Cargando editor...
Mostrar pista

Mueve el signo menos - dentro de un lookbehind positivo (?<=-).

Solución disponible después de 3 intentos