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 →
Se basa en Grupos y referencias inversas
Qué aprenderás
Pasos · 12
- 01Mirar sin consumirInstrucciones
- 02Lookahead positivoCaza
- 03Lookahead para un carácterCaza
- 04Lookahead negativoCaza
- 05“No va seguido de”Caza
- 06Lookbehind positivoCaza
- 07Lookbehind negativoCaza
- 08Combinar asercionesCaza
- 09Una contraseña más estrictaCaza
- 10Una palabra que NO termina en sCaza
- 11Golf: q no seguida de uCaza
- 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
Atrapa
- 12px
- 300px
- w: 8px
Deja libre
- 12em
- px12
- 12 px
El lookahead exige
pxjusto después de los dígitos, pero la coincidencia en sí es solo el número.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.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.Atrapa
- play
- display
- player
Deja libre
- replay
- replays
El lookbehind negativo deja libre
playsolo cuandoreva 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 elpx. - Llevar un lookbehind de JavaScript a otro motor de regex. El módulo
rede 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) →