Sintaxis, reglas y ejemplos

Hoja de referencia de regex

Todas las reglas de las regex en una página, cada una con un ejemplo en vivo que puedes probar, para quienes juegan a Regex Hunter y para cualquiera que escriba patrones.

Caracteres y escapes

Detalles →
SintaxisSignificado · ejemplo
abclos caracteres a, b, c en orden
.cualquier carácter excepto un salto de línea
\. \* \\un metacarácter tomado literalmente
\t \n \rtabulador, salto de línea, retorno de carro

Clases y abreviaturas

Detalles →
SintaxisSignificado · ejemplo
[abc]uno de a, b o c
[^abc]cualquier carácter excepto a, b o c
[a-z]un rango: cualquier letra minúscula
\d \Dun dígito / algo que no es dígito
\w \Wun carácter de palabra [A-Za-z0-9_] / cualquier otro
\s \Sespacio en blanco / todo lo demás
\p{L}cualquier letra de cualquier escritura (con el modificador u)
SintaxisSignificado · ejemplo
^inicio del texto (de una línea con m)
$fin del texto (de una línea con m)
\bun límite de palabra
\Bno es un límite de palabra

Cuantificadores

Detalles →
SintaxisSignificado · ejemplo
*cero o más
+uno o más
?opcional: cero o uno
{3}exactamente 3
{2,5}entre 2 y 5
{2,}2 o más
*? +? ??perezoso: lo menos posible

Grupos y referencias inversas

Detalles →
SintaxisSignificado · ejemplo
(abc)un grupo de captura
(?:abc)un grupo que no captura
(?<name>abc)un grupo de captura con nombre
\1el texto que capturó el grupo 1
\k<name>el texto que capturó un grupo con nombre
a|ba o b

Lookaround

Detalles →
SintaxisSignificado · ejemplo
(?=abc)seguido de abc (lookahead)
(?!abc)no seguido de abc
(?<=abc)precedido de abc (lookbehind)
(?<!abc)no precedido de abc

Modificadores

Detalles →
SintaxisSignificado · ejemplo
iignorar mayúsculas y minúsculas
gglobal: todas las coincidencias, no solo la primera
mmultilínea: ^ y $ en cada línea
sdotall: . también coincide con saltos de línea
uunicode: \p{…} y \u{…}
ysticky: coincide solo en lastIndex

Reglas y ejemplos

01 Cómo funciona una regex

Una expresión regular (regex) es un pequeño lenguaje de patrones para describir texto. El motor recorre tu patrón y el texto a la vez, de izquierda a derecha, intentando que cada parte del patrón encaje con caracteres de la cadena. Si lo consigue, la cadena coincide.

Dos preguntas cubren casi todo lo que harás:

cada carácter

Un patrón como cat significa “una c, luego una a, luego una t, seguidas”.

cuántas veces

Los cuantificadores como + y * indican cuántas veces puede repetirse lo anterior.

Por defecto, una regex coincide si el patrón aparece en cualquier parte de la cadena: no tiene que cubrirla entera, a menos que lo ancles.

//
✓cat
✓a cat sat
✓category
✕dog
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

En el juego (JavaScript)

En Regex Hunter escribes el cuerpo del patrón, la parte entre las barras. El tablero marca una palabra como atrapada cuando tu patrón coincide en cualquier parte de ella (usa anclas para exigir una coincidencia estricta).

02 Caracteres literales

La mayoría de los caracteres coinciden consigo mismos. Letras, dígitos y espacios son literales: regex coincide con el texto “regex”, 42 coincide con “42”. Por defecto se distinguen mayúsculas y minúsculas, así que Cat no coincide con “cat” (el modificador i lo cambia).

//
✓code
✕CODE
✓decode
✓coder
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Fundamentos de la caza

03 Escapar metacaracteres

Los metacaracteres son la docena de caracteres que tienen un significado especial en regex:

. ^ $ * + ? ( ) [ ] { } | \\ /

Para buscar uno de forma literal, ponle una barra invertida delante. \. coincide con un punto de verdad, \+ con un signo más, \\ con una barra invertida. Dentro de una clase de caracteres, la mayoría pierde su poder y no hace falta escaparlos.

//
✓3.14
✕3x14
✕3,14
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Fundamentos de la caza · Jugar: Cazas de escape

04 El punto ( . )

El punto . coincide con un solo carácter cualquiera excepto un salto de línea (salvo que actives el modificador s / dotall). Es el token del que más se abusa en las regex: cuando en realidad quieres decir “cualquier letra” o “cualquier dígito”, una clase es más segura.

//
✓cat
✓cot
✓c4t
✕ct
✕caat
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

Aquí c.t necesita exactamente un carácter entre la c y la t, así que “ct” (cero) y “caat” (dos) fallan.

PrácticaAcademia: Fundamentos de la caza

05 Clases de caracteres [ ]

Los corchetes definen un conjunto: coinciden con exactamente uno de los caracteres que contienen. [aeiou] coincide con cualquier vocal. Usa un guion para un rango: [a-z], [0-9], [A-Fa-f0-9] (un dígito hexadecimal). Empieza con ^ para negar: [^0-9] es “cualquier carácter que no sea un dígito”.

SintaxisSignificado
[abc]a, b o c
[a-z]cualquier letra minúscula
[0-9a-fA-F]un dígito hexadecimal
[^aeiou]cualquier cosa menos una vocal minúscula
[.\-]un punto o un guion literal (dentro de una clase, la mayoría de los metacaracteres son literales)
//
✓C
✓F
✕H
✕c
✕7
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

Trampas

Un guion es literal al principio o al final ([-a], [a-]). Para incluir ], escápalo ([\]a]): en JavaScript [] es una clase vacía, así que []a] no funciona. ^ solo niega si es el primer carácter.

PrácticaAcademia: Clases de caracteres · Pack: Castillos de caracteres · Jugar: Cazas de clases de caracteres

06 Clases abreviadas

Las clases abreviadas son atajos de una letra para conjuntos comunes, como \d para cualquier dígito. La mayúscula es la negación de la minúscula correspondiente.

SintaxisSignificado
\d \Dun dígito [0-9] / algo que no es un dígito
\w \Wun carácter de palabra [A-Za-z0-9_] / cualquier otro
\s \Sespacio en blanco (espacio, tabulador, salto de línea…) / todo lo demás
\t \n \rtabulador, salto de línea, retorno de carro
//
✓order 66
✕no digits here
✓2026
✓a1b2
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

En el juego (JavaScript)

En JavaScript, \d y \w solo cubren ASCII, incluso con el modificador u; usa \p{L} o \p{N} para otras escrituras. \s ya cubre los espacios Unicode. En el golf son mucho más cortos que escribir la clase entera.

PrácticaAcademia: Clases de caracteres

07 Anclas y límites

Las anclas coinciden con una posición, no con un carácter: tienen ancho cero.

SintaxisSignificado
^inicio de la cadena (o de la línea, con el modificador m)
$fin de la cadena (o de la línea, con el modificador m)
\bun límite de palabra: el borde entre un \w y algo que no es \w
\Buna posición que no es un límite de palabra

Rodea un patrón con ^…$ para obligarlo a coincidir con la cadena entera. \bcat\b coincide con la palabra completa “cat”, pero no con “category” ni con “scatter”.

//
✓cat
✓a cat sat
✕category
✕bobcat
✕concatenate
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Anclas y límites · Pack: Levando anclas · Jugar: Cazas de anclas

08 Cuantificadores

Un cuantificador indica cuántas veces puede repetirse el token anterior.

SintaxisSignificado
*cero o más
+uno o más
?cero o uno (opcional)
{3}exactamente 3
{2,5}entre 2 y 5
{2,}2 o más

Se aplican a lo que tienen justo delante: un carácter, una clase o un grupo. colou?r hace opcional la u (coincide con “color” y “colour”); (ab)+ repite el par.

//
✕a
✓aa
✓aaaa
✕aaaaa
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Cuantificadores · Pack: La cantera de cuantificadores · Jugar: Cazas de cuantificadores

09 Codicioso, perezoso y posesivo

Por defecto, los cuantificadores son codiciosos: toman todo lo que pueden y luego devuelven caracteres si el resto del patrón los necesita. Añade ? para volver uno perezoso: toma lo menos posible.

Ejemplo clásico: con <a><b>, el codicioso <.*> coincide con todo, mientras que el perezoso <.*?> se detiene en el primer >.

//g
✓<a><b>
✓<one>two<three>
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

Posesivo y atómico (no existen en JavaScript)

PCRE y Java también ofrecen cuantificadores posesivos (a*+) y grupos atómicos ((?>…)) que nunca devuelven caracteres, una protección contra el backtracking catastrófico. JavaScript no tiene ninguno de los dos; puedes emular un grupo atómico con un lookahead y una referencia inversa.

PrácticaAcademia: Cuantificadores

10 Alternancia y agrupación

| significa “o” y tiene la precedencia más baja: divide todo el patrón, salvo que lo encierres entre paréntesis. cat|dog coincide con cualquiera de las dos palabras; gr(a|e)y coincide con “gray” o “grey”, mientras que gra|ey significaría “gra” o “ey”.

//
✓gray
✓grey
✕groy
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Grupos y referencias inversas · Jugar: Cazas de alternancia

11 Grupos: captura y nombre

Los paréntesis hacen dos cosas: agrupan tokens para que un cuantificador o | se aplique a todos, y capturan lo que coincidió para reutilizarlo después.

SintaxisSignificado
(…)grupo de captura, numerado 1, 2, 3… de izquierda a derecha
(?:…)grupo sin captura: agrupa sin llevar la cuenta
(?<name>…)grupo de captura con nombre

Usa (?:…) cuando solo necesites agrupar (es más rápido y mantiene ordenados los números de grupo), y nombres cuando un patrón tenga varias capturas que merezcan una etiqueta.

//
✓ab
✓abab
✓ababab
✓aba
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Grupos y referencias inversas · Pack: Patrones con truco · Jugar: Cazas de grupos

12 Referencias inversas

Una referencia inversa coincide con el mismo texto que un grupo ya capturó. \1 se refiere al grupo 1, \2 al grupo 2, \k<name> a un grupo con nombre. Así es como exiges una repetición:

SintaxisSignificado
(.)\1cualquier carácter seguido de sí mismo: una letra doble
(.)(.)\2\1un palíndromo de 4 caracteres (p. ej., “abba”)
(.).*\1el mismo carácter aparece otra vez más adelante
//
✓book
✓tree
✕cat
✓success
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

Referencia inversa vs. clase

Lo importante: (.)\1 exige el mismo carácter dos veces, que no es lo mismo que [a-z][a-z] (dos letras cualesquiera). Las referencias inversas son lo que permite a una regex comprobar “lo mismo otra vez”, algo que una clase normal no puede expresar.

PrácticaAcademia: Grupos y referencias inversas

13 Lookahead y lookbehind

Un lookaround comprueba que algo aparece (o no) junto a la posición actual sin consumir caracteres: es una condición de ancho cero.

SintaxisSignificado
(?=…)lookahead positivo: seguido de …
(?!…)lookahead negativo: no seguido de …
(?<=…)lookbehind positivo: precedido de …
(?<!…)lookbehind negativo: no precedido de …

Una regla tipo contraseña, “contiene un dígito y una letra”, apila lookaheads al principio: ^(?=.*\d)(?=.*[a-z]).+$. Cada (?=…) revisa toda la cadena desde la posición 0 y luego la coincidencia continúa. En la mayoría de los motores, el lookbehind exige un ancho fijo (o acotado).

//g
✓16px
✓24 px
✕16pt
✕px
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

En el juego (JavaScript)

JavaScript admite lookbehind desde ES2018: los navegadores modernos lo ejecutan sin problema, así que funciona en el juego. Los motores más antiguos (y algunas herramientas) no lo tienen.

PrácticaAcademia: Lookarounds · Jugar: Cazas de lookarounds

14 Modificadores

Los modificadores son letras sueltas que cambian cómo coincide todo el patrón, como i para ignorar mayúsculas y minúsculas. En el código van después de la barra de cierre (/cat/gi).

SintaxisSignificado
iignorar mayúsculas y minúsculas
gglobal: encuentra todas las coincidencias, no solo la primera
mmultilínea: ^ y $ coinciden en cada salto de línea
sdotall: . también coincide con saltos de línea
umodo Unicode (activa \u{…} y \p{…})
ysticky: coincide solo en lastIndex
xextendido/verbose: ignora los espacios y permite comentarios (PCRE/Python; no JS)
//gi
✓Cat caught a CAT
✓category
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

15 Unicode y propiedades

Con el modificador u puedes buscar por propiedad Unicode: \p{L} es cualquier letra de cualquier escritura, \p{N} cualquier número, \p{Emoji} un emoji, y \P{…} niega. \u{1F600} coincide con un punto de código por su valor hexadecimal.

Sin u, una regex trabaja con unidades de código UTF-16, así que un emoji u otro carácter astral cuenta como dos “caracteres”, y normalmente no es lo que quieres. Los escapes de propiedades son la forma limpia de manejar texto real.

Compatibilidad entre motores

Los escapes de propiedades existen en JavaScript (con u), PCRE, Python (con el módulo regex), Java y otros, pero los nombres exactos de las propiedades cambian. Para que sea portable, usa los comunes (L, N, P, nombres de escrituras).

16 Patrones comunes

Son patrones cortos y reutilizables para formatos cotidianos: enteros, decimales, correos, colores hexadecimales y fechas ISO. Trata las regex de “validación” como aproximaciones: las reglas reales de un correo o una URL son mucho más enrevesadas que una sola línea.

SintaxisSignificado
^\d+$un entero no negativo, toda la cadena
-?\d+(\.\d+)?un número decimal con signo opcional
^[\w.+-]+@[\w-]+\.[\w.-]+$la forma aproximada de un correo
^#?[0-9a-fA-F]{6}$un color hexadecimal de 6 dígitos
^\d{4}-\d{2}-\d{2}$una fecha ISO (AAAA-MM-DD)
//
✓42
✓-3.14
✕3.
✕x9
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

PrácticaAcademia: Validadores del mundo real · Jugar: Cazas mixtas

17 Trucos para patrones más cortos

El golf es el arte del patrón más corto que atrapa todos los objetivos y deja libres a todos los inocentes. El tablero solo pregunta “¿coincide en alguna parte?”, así que rara vez necesitas anclas o describir la palabra entera.

  • Busca el rasgo distintivo más pequeño. Si todos los objetivos contienen q y ningún inocente la contiene, la respuesta es simplemente q.
  • Mejor una clase que una alternancia: [cb]at gana a cat|bat.
  • Las abreviaturas son cortas: \d en lugar de [0-9], \w en lugar de [A-Za-z0-9_].
  • Quita las anclas salvo que un inocente las exija. Añade ^ o $ solo para excluir una palabra casi idéntica.
  • Haz opcionales las diferencias con ? en lugar de crear ramas.
  • Recurre a una referencia inversa cuando los objetivos comparten una repetición que los inocentes no tienen.

Intenta acortar este: cat y bat son objetivos, y “rat” es un inocente:

//
✓cat
✓bat
✕rat
✕mat
Edita el patrón: las coincidencias se resaltan en vivo Abrir en la Zona de pruebas

¿Te animas a competir? La caza del día, los packs de práctica y la Zona de pruebas son el lugar para ponerlo en práctica.

PrácticaAcademia: Técnicas de golf

18 Diferencias entre motores

Las variantes de regex son los dialectos de los distintos motores, y no todas admiten las mismas funciones. Las grandes familias son JavaScript, PCRE (PHP, y cercano a Perl), Python (re / regex) y Java.

SintaxisSignificado
LookbehindJS (ES2018+), PCRE, Python, Java: ancho fijo en la mayoría; PCRE/Python permiten más
Posesivo / atómicoPCRE, Java, Python regex; no JavaScript
Recursión (?R)solo PCRE y Python regex: ni JS, ni Python re
Grupo con nombre(?<n>) en JS/PCRE/.NET; (?P<n>) en Python clásico
x / modificador verbosePCRE, Python, Java; no JavaScript

En el juego (JavaScript)

El juego evalúa tu patrón con el motor JavaScript del navegador, así que se aplican las reglas de JS: el lookbehind y los grupos con nombre funcionan; los cuantificadores posesivos y la recursión no. Los probadores en vivo de esta página usan el mismo motor.

19 Rendimiento y backtracking

La mayoría de las regex son rápidas, pero los cuantificadores anidados sobre los mismos caracteres pueden dispararse. (a+)+$ contra una larga serie de “a” seguida de “!” obliga al motor a probar un número exponencial de divisiones: es el backtracking catastrófico.

  • Evita un cuantificador dentro de otro cuantificador que pueda coincidir con lo mismo ((a+)+, (.*)*).
  • Haz que las partes internas sean mutuamente excluyentes, para que solo haya una forma de coincidir.
  • Ancla con ^/$ y prefiere clases concretas a . para reducir el espacio de búsqueda.
  • En los motores que los tienen, los cuantificadores posesivos y los grupos atómicos eliminan el backtracking por completo.