Lookarounds

Mira sin consumir: el lookahead y el lookbehind son aserciones de ancho cero que comprueban lo que hay antes o después de una posición y luego se retiran para que la coincidencia real continúe.

Lee las reglas: Lookahead y lookbehind en la Guía →Entrénalo: Hechicería regex →

Qué aprenderás

Lookahead Lookahead negativo Lookbehind Lookbehind negativo Reglas de contraseña

Pasos · 12

  1. 01Mirar sin consumirInstrucciones
  2. 02Lookahead positivoCaza
  3. 03Lookahead para un carácterCaza
  4. 04Lookahead negativoCaza
  5. 05“No va seguido de”Caza
  6. 06Lookbehind positivoCaza
  7. 07Lookbehind negativoCaza
  8. 08Combinar asercionesCaza
  9. 09Una contraseña más estrictaCaza
  10. 10Una palabra que NO termina en sCaza
  11. 11Golf: q no seguida de uCaza
  12. 12Aserciones dominadasInstrucciones

Lookahead y lookbehind en regex

Los lookarounds permiten que una expresión regular compruebe el texto que hay junto a una posición sin incluirlo en la coincidencia. Son de ancho cero, como las anclas: la comprobación se cumple o falla, y el cursor se queda donde estaba. El resto del patrón sigue desde ese mismo punto, como si el vistazo nunca hubiera ocurrido.

Un lookahead mira a la derecha. (?=...) exige que el texto que sigue coincida y (?!...) exige que no coincida. Un lookbehind mira a la izquierda: (?<=...) exige que coincida el texto anterior y (?<!...) exige que no. JavaScript admite los cuatro, y su lookbehind puede tener cualquier longitud.

Úsalos cuando el contexto decide la coincidencia pero no debe formar parte de ella: un número solo si le sigue una unidad, una palabra solo si le falta cierto prefijo, o varias reglas sobre una misma entrada, como una contraseña que necesita un dígito y una mayúscula en cualquier orden. En una caza, un lookaround suele dejar libres a los inocentes que comparten todas sus letras con los monstruos.

Ejemplos

  1. /\d+(?=px)/

    Atrapa

    • 12px
    • 300px
    • w: 8px

    Deja libre

    • 12em
    • px12
    • 12 px

    El lookahead exige px justo después de los dígitos, pero la coincidencia en sí es solo el número.

  2. /(?<=#)\w+/

    Atrapa

    • #tag
    • go #team
    • #2026

    Deja libre

    • tag
    • # team
    • a#

    El lookbehind busca # a la izquierda y lo deja fuera, así que la coincidencia es la etiqueta sola.

  3. /^(?!.*\d)\w+$/

    Atrapa

    • hello
    • snake_case

    Deja libre

    • r2d2
    • top10

    El lookahead negativo recorre primero la palabra entera con .*, así que basta un dígito en cualquier parte para rechazarla.

  4. /(?<!re)play/

    Atrapa

    • play
    • display
    • player

    Deja libre

    • replay
    • replays

    El lookbehind negativo deja libre play solo cuando re va justo delante.

Errores frecuentes

  • Olvidar `. * en un lookahead al inicio del texto. ^(?=\d) solo comprueba el primer carácter; escribe ^(?=.*\d)` para decir que hay un dígito en cualquier parte.
  • Esperar que el texto comprobado salga en el resultado. Un lookaround nunca añade caracteres a la coincidencia, así que un reemplazo con \d+(?=px) cambia el número y conserva el px.
  • Llevar un lookbehind de JavaScript a otro motor de regex. El módulo re de Python exige una longitud fija dentro de (?<=...), y muchos otros motores la limitan, así que (?<=\$\d*) funciona en JavaScript pero allí falla.

Lee las reglas: Lookahead y lookbehind en la Guía →Entrénalo: Hechicería regex →

Lee más: Lookahead y lookbehind en regex, explicados con tableros interactivos →

Lee más: Reglas de contraseñas con lookaheads en regex (y cuándo no usarlos) →