Desarrollo

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.

Probador de regex resaltando cuatro fechas encontradas por un patrón con grupos con nombre, con vista previa del reemplazo
Un patrón de fecha con grupos con nombre, todas las coincidencias listadas y las fechas reformateadas como AAAA-MM-DD. Captura de pantalla de nuestra herramienta gratuita: Probador de regex.

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ónCoincide conEjemplo
.Cualquier carácter excepto un salto de líneac.t encuentra cat, cot, c9t
\dUn dígito (0–9)\d\d encuentra 42
\wLetra, dígito o guion bajo\w+ encuentra user_1
\sEspacio en blanco (espacio, tabulador, salto de línea)a\sb encuentra "a b"
\D \W \SLo contrario de \d, \w, \s\D+ encuentra abc
[abc]Uno de a, b o cgat[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ónSignificadoEjemplo
*0 o másab*c encuentra ac, abc, abbc
+1 o másab+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ónSignificado
^Inicio del texto (o de cada línea con el flag m)
$Final del texto (o de cada línea con el flag m)
\bLí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ónSignificado
(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|perroO gato o perro
\1Referencia 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ónSignificadoEjemplo
(?=…)Seguido de\d+(?=€) encuentra 50 en "50€"
(?!…)No seguido de\d+(?!€)
(?<=…)Precedido de(?<=\$)\d+ encuentra 50 en "$50"
(?<!…)No precedido de(?<!-)\d+

Flags

  • g global: encuentra todas las coincidencias, no solo la primera.
  • i sin distinguir mayúsculas: /hola/i encuentra "Hola".
  • m multilínea: ^ y $ funcionan en cada línea.
  • s dotall: . también encuentra saltos de línea.
  • u unicode: 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

UsoPatró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

  1. Abre el probador de regex gratuito.
  2. Escribe tu patrón y activa los flags (g, i, m, s, u).
  3. Pega un texto de ejemplo, incluidos casos que no deberían coincidir.
  4. Revisa las coincidencias resaltadas y los grupos de captura de cada una.
  5. Previsualiza un reemplazo con $1, $<name> o $&.
  6. 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.

Abrir la herramienta

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.

Probador de regex Gratis · privado · en tu navegador Abrir la herramienta