Probador Regex

Probar expresiones regulares en vivo

Patron regex
1
2
Procesado localmente en su navegador
Entendiendo Expresiones regulares
TL;DR

Las expresiones regulares (regex) son patrones que coinciden con texto. Se usan en todas partes: validacion de entradas, buscar/reemplazar, analisis de logs. Sintaxis densa pero fácil de aprender.

¿Qué es Regex?

Una expresión regular (regex o regexp) es una secuencia de caracteres que define un patrón de búsqueda. Los patrones regex describen cómo se ve el texto en lugar de lo que significa: coinciden con secuencias de caracteres, no con semántica.

Las expresiones regulares son una de las herramientas más potentes y omnipresentes en programación. Aparecen en prácticamente todos los lenguajes de programación (JavaScript, Python, Java, Go, Rust), todos los editores de texto (VS Code, Vim, Sublime), todas las herramientas de línea de comandos (grep, sed, awk) y la mayoría de bases de datos (PostgreSQL, MySQL). Aprender regex es un multiplicador de fuerza: la misma sintaxis funciona casi en todas partes.

La contrapartida es la legibilidad. Los patrones regex son densos y pueden parecer crípticos a primera vista. Un patrón como ^(?=.*[A-Z])(?=.*\d)[A-Za-z\d@$!%*?&]{8,}$ es perfectamente lógico una vez que conoces la sintaxis, pero impenetrable si no la conoces. La clave está en aprender los bloques fundamentales uno a uno.

Conceptos fundamentales

Clases de caracteres

Una clase de caracteres coincide con cualquier carácter individual de un conjunto definido:

  • [abc] — Coincide con a, b o c
  • [a-z] — Coincide con cualquier letra minúscula
  • [^abc] — Coincide con cualquier carácter excepto a, b o c
  • . — Coincide con cualquier carácter excepto salto de línea

Clases abreviadas

AbreviaturaEquivalenteSignificado
\d[0-9]Cualquier dígito
\D[^0-9]Cualquier no-dígito
\w[a-zA-Z0-9_]Cualquier carácter de palabra
\W[^a-zA-Z0-9_]Cualquier carácter que no sea de palabra
\s[ \t\n\r\f\v]Cualquier espacio en blanco
\S[^ \t\n\r\f\v]Cualquier no-espacio en blanco

Cuantificadores

Los cuantificadores especifican cuántas veces debe repetirse un patrón:

CuantificadorSignificadoEjemplo
*0 o mása* coincide con "", "a", "aaa"
+1 o mása+ coincide con "a", "aaa" pero no con ""
?0 o 1a? coincide con "" o "a"
{n}Exactamente na{3} coincide con "aaa"
{n,m}Entre n y ma{2,4} coincide con "aa", "aaa", "aaaa"
{n,}n o mása{2,} coincide con "aa", "aaa", …

Anclas

Las anclas coinciden con posiciones, no con caracteres:

  • ^ — Inicio de cadena (o de línea en modo multilínea)
  • $ — Fin de cadena (o de línea en modo multilínea)
  • \b — Límite de palabra (entre \w y \W)

Grupos y alternancia

  • (abc) — Grupo de captura: coincide con abc y lo captura para referencias posteriores
  • (?:abc) — Grupo sin captura: coincide con abc sin capturarlo
  • a|b — Alternancia: coincide con a o b

Hoja de referencia de Regex

SintaxisNombreDescripción
.PuntoCualquier carácter (excepto salto de línea)
\dDígito[0-9]
\wPalabra[a-zA-Z0-9_]
\sEspacioEspacio, tabulación, salto de línea
*Asterisco0 o más (codicioso)
+Más1 o más (codicioso)
?Interrogación0 o 1 (opcional)
{n,m}RangoEntre n y m repeticiones
()GrupoGrupo de captura
[]ClaseClase de caracteres
^CircunflejoInicio de cadena/línea
$DólarFin de cadena/línea
|BarraAlternancia (OR)
(?=)LookaheadAfirma lo que sigue
(?<=)LookbehindAfirma lo que precede

Lookahead y Lookbehind

Lookahead y lookbehind son aserciones de ancho cero: verifican si un patrón existe antes o después de la posición actual sin consumir caracteres.

Anatomy of an Email Regex The regex pattern for email validation decomposed into labeled segments: local part, at sign, domain, dot, and TLD. Email Regex Anatomy ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ^ Start of string [a-zA-Z0-9._%+-]+ Local part: letters, digits, dots, specials (1 or more) @ Literal @ symbol [a-zA-Z0-9.-]+ Domain: letters, digits, dots, hyphens (1 or more) \. Escaped literal dot [a-zA-Z]{2,} TLD: letters only (2 or more chars) $ End of string Match: user.name+tag@sub.example.com user.name+tag = local | sub.example = domain | com = TLD No match: user@@example..com Double @ and consecutive dots violate the pattern

Lookahead positivo (?=...) afirma que lo que sigue coincide con un patrón. Por ejemplo, \d+(?= USD) coincide con dígitos solo si van seguidos de USD: coincide con 100 en “100 USD” pero no en “100 EUR”.

Lookahead negativo (?!...) afirma que lo que sigue no coincide. \d+(?! USD) coincide con dígitos que no van seguidos de USD.

Lookbehind positivo (?<=...) afirma que lo que precede coincide. (?<=\$)\d+ coincide con dígitos precedidos por $: coincide con 50 en “$50” pero no en “50”.

Lookbehind negativo (?<!...) afirma que lo que precede no coincide.

Los lookarounds son de ancho cero: verifican el contexto sin consumir caracteres, por lo que el texto coincidente no incluye el propio patrón del lookaround.

Patrones comunes

Estos son patrones probados en batalla para tareas de validación frecuentes:

  • Email (básico): ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • URL: https?://[^\s/$.?#].[^\s]*
  • IPv4: ^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
  • Fecha (YYYY-MM-DD): ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
  • Teléfono (internacional): ^\+?[1-9]\d{1,14}$
  • Color hexadecimal: ^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$

Casos de uso comunes

  • Validación de entradas: Verificar que los campos de formulario contengan emails, números de teléfono, códigos postales o identificadores válidos antes del envío
  • Buscar y reemplazar: Encontrar y transformar patrones en bases de código: renombrar variables, actualizar importaciones, reformatear datos
  • Análisis de logs: Extraer marcas de tiempo, direcciones IP, códigos de error y trazas de pila de archivos de log no estructurados
  • Extracción de datos: Extraer datos estructurados de texto semiestructurado como correos electrónicos, PDF o HTML
  • Enrutamiento de URL: Los frameworks web usan patrones regex para asignar URLs a funciones manejadoras

Prueba estos ejemplos

Coincidencia de regex para email Válido

Este patrón coincide con direcciones de correo electrónico estándar como user@example.com. Verifica una parte local (letras, dígitos, puntos, guiones bajos), un símbolo @, un nombre de dominio y un TLD de al menos 2 caracteres.

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Email inválido (sin coincidencia) Inválido

Esta cadena tiene doble @ y puntos consecutivos, que la regex de email rechaza. El patrón requiere exactamente un @ y no permite puntos consecutivos en el dominio.

user@@example..com