¿Qué es regex?
Regex — abreviatura de expresión regular, también escrita regexp — es un lenguaje de patrones compacto para buscar, encontrar y extraer texto. En vez de buscar una cadena exacta, un regex describe una forma (por ejemplo, "tres dígitos, luego un guion, luego cuatro dígitos") que puede coincidir con muchas entradas distintas a la vez. La sintaxis principal — clases de caracteres, cuantificadores, grupos — se comparte ampliamente entre lenguajes: JavaScript, Python, Java, grep, y la mayoría de los demás se basan en las mismas ideas, con algunas diferencias en los detalles (ver las preguntas frecuentes abajo).
Flags de regex comunes
g— global: encuentra todas las coincidencias, no solo la primera.i— coincidencia sin distinguir mayúsculas y minúsculas.m— multilínea:^y$coinciden con el inicio/fin de cada línea, no solo de toda la cadena.s— dotAll:.también coincide con caracteres de salto de línea.u— unicode: habilita coincidencias Unicode completas (necesario para algunas secuencias de escape Unicode).
Hoja de referencia de regex
| Patrón | Coincide con |
|---|---|
. | Cualquier carácter excepto salto de línea |
\d / \D | Un dígito / cualquier cosa que no sea un dígito |
\w / \W | Un carácter de palabra (letra, dígito, guion bajo) / cualquier cosa que no lo sea |
\s / \S | Espacio en blanco / cualquier cosa que no sea espacio en blanco |
\b | Un límite de palabra |
^ / $ | Inicio / fin de la cadena (o línea, con el flag m) |
* / + / ? | Cero o más / uno o más / cero o uno del token anterior |
{n} / {n,} / {n,m} | Exactamente n / n o más / entre n y m repeticiones |
[abc] / [^abc] | Cualquiera entre a, b, c / cualquier carácter excepto a, b, c |
[a-z] | Cualquier carácter en el rango de a a z |
(...) | Grupo de captura — recuerda lo que coincidió |
(?:...) | Grupo sin captura — agrupa sin recordar |
(?<name>...) | Grupo de captura con nombre |
| | Alternancia — coincide con lo que haya a cualquier lado |
(?=...) / (?!...) | Lookahead positivo / negativo |
(?<=...) / (?<!...) | Lookbehind positivo / negativo |
Ejemplos de patrones comunes
| Lo que quieres hacer coincidir | Patrón |
|---|---|
| Una dirección de correo (simple) | [\w.+-]+@[\w-]+\.[a-zA-Z]{2,} |
| Un número, con decimales opcionales | -?\d+(\.\d+)? |
| Un monto en dólares como $1,234.56 | \$[\d,]+(\.\d{2})? |
| Un número de teléfono de EE. UU. | \(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4} |
| Una URL (simple) | https?://[^\s]+ |
| Un código de color hex | #([0-9a-fA-F]{3}|[0-9a-fA-F]{6}) |
Estos están deliberadamente simplificados — un patrón de correo o URL totalmente conforme a la especificación es mucho más largo y rara vez vale la pena en la práctica. Pega cualquiera de estos en el campo de patrón de arriba y pruébalos contra texto real.
Preguntas frecuentes
¿Esta herramienta envía mi patrón o texto a un servidor?
No — la coincidencia se ejecuta completamente en tu navegador usando el motor RegExp nativo de JavaScript. No se envía nada a ningún lado.
¿Por qué algunos patrones se ejecutan lento o congelan la página?
Ciertos patrones — especialmente los que tienen cuantificadores anidados como (a+)+ — pueden mostrar "backtracking catastrófico" contra una entrada específica, donde el tiempo de coincidencia crece exponencialmente con la longitud de la entrada. Como esto se ejecuta en tu propia pestaña del navegador, un patrón lento solo afecta tu sesión; prueba con un texto de prueba más corto o un patrón menos ambiguo si se congela.
¿Esto prueba regex de Python, Java o grep?
No — esta herramienta usa el motor RegExp nativo de JavaScript (sintaxis ECMAScript), ya que se ejecuta completamente en tu navegador. Python (re), Java (java.util.regex), y grep (POSIX/PCRE) usan cada uno su propio motor de regex. La sintaxis principal se comparte en gran parte — clases de caracteres, cuantificadores, grupos — pero hay diferencias reales: Python soporta flags en línea como (?i) que JavaScript no soporta, el soporte de lookbehind varía según el motor y la versión, y las reglas de escape difieren ligeramente. Un patrón que funciona aquí normalmente necesitará pequeños ajustes para funcionar en otro lado.
¿Esto es lo mismo que un generador o constructor de regex?
No exactamente. Un generador de regex intenta escribir un patrón por ti a partir de un ejemplo o una descripción en lenguaje simple; un constructor de regex suele ser una interfaz visual, de armar haciendo clic, para construir uno. Esta herramienta asume que ya tienes un patrón — o estás iterando sobre uno — y te permite probarlo en vivo contra texto real: un probador de regex, no un escritor de regex.