Chuleta de regex: expresiones regulares explicadas con ejemplos
Las expresiones regulares parecen crípticas, pero se construyen con un puñado de piezas. Esta chuleta explica cada una con un ejemplo claro y después las combina en patrones que de verdad vas a usar.
Respuesta rápida
Lo esencial: . cualquier carácter, \d dígito, \w carácter de palabra, \s espacio en blanco, * cero o más, + uno o más, ? opcional, {n,m} entre n y m, ^ inicio, $ final, [abc] uno de un conjunto, (…) grupo de captura y a|b uno u otro. Prueba cada patrón en un probador de regex antes de usarlo en tu código.
Una expresión regular (regex) es un patrón que describe texto. Se usa para buscar, validar y reemplazar: encontrar todos los correos de un documento, comprobar que un código postal es válido o cambiar el formato de unas fechas. Las regex funcionan en casi todos los lenguajes de programación y en herramientas como VS Code, Excel y Google Sheets.
Esta chuleta usa la sintaxis de JavaScript, muy parecida a la de Python, Java, PHP y la mayoría de los lenguajes.
Clases de caracteres
| Patrón | Coincide con | Ejemplo |
|---|---|---|
. | Cualquier carácter excepto un salto de línea | c.t encuentra cat, cot, c9t |
\d | Un dígito (0–9) | \d\d encuentra 42 |
\w | Letra, dígito o guion bajo | \w+ encuentra user_1 |
\s | Espacio en blanco (espacio, tabulador, salto de línea) | a\sb encuentra "a b" |
\D \W \S | Lo contrario de \d, \w, \s | \D+ encuentra abc |
[abc] | Uno de a, b o c | gat[ao] encuentra gata, gato |
[^abc] | Cualquier carácter excepto a, b, c | [^0-9] encuentra cualquier no dígito |
[a-z] | Un rango | [A-Za-z] encuentra cualquier letra ASCII |
Ojo: \w y [a-z] no incluyen letras como ñ o á. Para ellas, usa \p{L} con el flag u.
Cuantificadores
| Patrón | Significado | Ejemplo |
|---|---|---|
* | 0 o más | ab*c encuentra ac, abc, abbc |
+ | 1 o más | ab+c encuentra abc, abbc (no ac) |
? | 0 o 1 (opcional) | colou?r encuentra color, colour |
{3} | Exactamente 3 | \d{3} encuentra 123 |
{2,4} | Entre 2 y 4 | \d{2,4} encuentra 12, 123, 1234 |
{2,} | 2 o más | \w{2,} encuentra palabras de 2 o más caracteres |
*? +? | Perezoso: lo mínimo posible | <.+?> encuentra una etiqueta HTML cada vez |
Los cuantificadores son codiciosos por defecto: abarcan todo lo posible. En el texto <b>negrita</b>, el patrón <.+> abarca la cadena entera, mientras que el perezoso <.+?> solo abarca <b>.
Anclas y límites
| Patrón | Significado |
|---|---|
^ | Inicio del texto (o de cada línea con el flag m) |
$ | Final del texto (o de cada línea con el flag m) |
\b | Límite de palabra: \bsol\b encuentra "sol" pero no "soldado" |
Usa ^…$ cuando valides una entrada completa. Sin anclas, \d+ encuentra sin problema el "123" dentro de "abc123xyz".
Grupos y alternativas
| Patrón | Significado |
|---|---|
(abc) | Grupo de captura: recuerda la coincidencia como $1, $2… |
(?:abc) | Grupo sin captura: agrupa sin recordar |
(?<year>\d{4}) | Grupo con nombre, se usa como $<year> |
gato|perro | O gato o perro |
\1 | Referencia inversa: el mismo texto que el grupo 1 |
Lookarounds
Los lookarounds comprueban lo que hay antes o después sin incluirlo en la coincidencia:
| Patrón | Significado | Ejemplo |
|---|---|---|
(?=…) | Seguido de | \d+(?=€) encuentra 50 en "50€" |
(?!…) | No seguido de | \d+(?!€) |
(?<=…) | Precedido de | (?<=\$)\d+ encuentra 50 en "$50" |
(?<!…) | No precedido de | (?<!-)\d+ |
Flags
gglobal: encuentra todas las coincidencias, no solo la primera.isin distinguir mayúsculas:/hola/iencuentra "Hola".mmultilínea:^y$funcionan en cada línea.sdotall:.también encuentra saltos de línea.uunicode: activa clases\p{…}como\p{L}, cualquier letra de cualquier idioma.
Escapar caracteres especiales
Estos caracteres tienen un significado especial: . * + ? ^ $ { } ( ) [ ] | \ /. Para buscarlos literalmente, pon una barra invertida delante. \. encuentra un punto real, así que ejemplo\.es no encuentra "ejemploXes".
Patrones prácticos para copiar
| Uso | Patrón |
|---|---|
| Comprobación sencilla de correo | ^[^\s@]+@[^\s@]+\.[^\s@]+$ |
| URL (http/https) | https?:\/\/[^\s/$.?#].[^\s]* |
| Fecha (AAAA-MM-DD) | ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ |
| Hora (24 h HH:MM) | ^([01]\d|2[0-3]):[0-5]\d$ |
| Color hexadecimal | ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ |
| Código postal español | ^(0[1-9]|[1-4]\d|5[0-2])\d{3}$ |
| Número entero o decimal | ^-?\d+(\.\d+)?$ |
| Espacios de más | \s{2,} (reemplazar por un espacio) |
| Espacios al final de línea | [ \t]+$ con el flag m |
Consejo de validación: las regex son geniales para detectar errores tipográficos, pero no pueden confirmar que un correo o una URL existan de verdad. Para los correos, un patrón sencillo más un correo de confirmación funciona mejor que una regex "perfecta" de 200 caracteres.
Cómo probar una regex
- Abre el probador de regex gratuito.
- Escribe tu patrón y activa los flags (
g,i,m,s,u). - Pega un texto de ejemplo, incluidos casos que no deberían coincidir.
- Revisa las coincidencias resaltadas y los grupos de captura de cada una.
- Previsualiza un reemplazo con
$1,$<name>o$&. - Copia el patrón como código JavaScript o Python.
Pruébalo gratis: Probador de regex
Prueba expresiones regulares en directo, con grupos de captura y una biblioteca de patrones. Funciona en tu navegador, sin registro.
Ejemplo: cambiar el formato de fechas con un reemplazo
Convierte fechas como 31/12/2026 al formato ISO 2026-12-31:
Patrón: (\d{2})\/(\d{2})\/(\d{4})
Reemplazo: $3-$2-$1
Con grupos con nombre, se lee mejor:
Patrón: (?<d>\d{2})\/(?<m>\d{2})\/(?<y>\d{4})
Reemplazo: $<y>-$<m>-$<d>
Errores habituales
- Olvidar escapar el punto.
.encuentra cualquier cosa; usa\.para un punto literal. - Olvidar las anclas en los patrones de validación.
- Abusar de
.*. Es codicioso y lento. Una clase concreta como[^"]*es más segura. - Backtracking catastrófico. Los cuantificadores anidados como
(a+)+$pueden tardar eternamente con ciertas entradas y bloquear un programa. Nuestro probador ejecuta los patrones con un límite de tiempo y te avisa. - Analizar HTML con regex. Vale para búsquedas rápidas, pero usa un analizador HTML real para algo serio.
Preguntas frecuentes
¿Las regex son iguales en todos los lenguajes?
La sintaxis básica es común, pero hay diferencias. Python usa (?P<name>…) para los grupos con nombre, y algunas funciones como el lookbehind varían entre motores. Prueba siempre en la variante que vayas a usar.
¿Qué significa \b?
Un límite de palabra: la posición entre un carácter de palabra y uno que no lo es. Así se buscan solo palabras completas.
¿Cómo busco un salto de línea?
Usa \n, o \r?\n para incluir también los finales de línea de Windows.
En resumen
Aprende las piezas básicas (clases, cuantificadores, anclas y grupos) y la mayoría de los patrones se vuelven legibles. Mantén los patrones concretos, ánclalos al validar y pruébalos siempre con ejemplos reales antes de publicarlos.
¿Algo desactualizado o poco claro? Escribe a contact@ultratoolsai.com y lo corregiremos.


