Regex tester: probador de expresiones regulares JavaScript
Prueba expresiones regulares de JavaScript con coincidencias, grupos y reemplazo en vivo. Todo se ejecuta localmente: no se sube nada.
- Entrada
- Pattern · flags · test text
- Salida
- Matches · groups · replaced text
Texto de prueba
¿Programar tareas en vez de buscar coincidencias? Abrir el generador de expresiones cron
Prueba expresiones regulares (regex) mientras escribes
Este regex tester ejecuta tu patrón con el motor JavaScript de tu propio navegador, el mismo que usará tu código Node.js o front-end, y resalta cada coincidencia en el texto de prueba mientras escribes. Al lado tienes la lista de coincidencias con sus posiciones y grupos de captura, una vista previa del reemplazo y una explicación línea a línea de lo que hace cada parte del patrón. Tu patrón y tu texto nunca salen de la página.
Cómo probar una regex
- Escribe el patrón entre las barras, sin las
/…/que lo rodean, o carga uno del menú Patrones comunes. - Activa o desactiva los flags:
gpara encontrar todas las coincidencias,ipara ignorar mayúsculas,mpara que^y$funcionen por línea, etc. - Pega o escribe tu texto de prueba. Las coincidencias se resaltan en colores alternos para que las contiguas se distingan.
- Abre Coincidencias para ver la posición y los grupos de cada una, Explicar para un desglose en lenguaje claro o Reemplazar para previsualizar una sustitución con
$1,$<name>o$&.
Flags de las expresiones regulares en JavaScript
- g (global)
- Encuentra todas las coincidencias en lugar de detenerse en la primera. Reemplazar también las sustituye todas.
- i (ignore case)
- Las letras coinciden sin importar mayúsculas o minúsculas, así que /cat/i encuentra Cat y CAT.
- m (multiline)
- ^ y $ coinciden al principio y al final de cada línea, no solo del texto completo.
- s (dotAll)
- El punto también coincide con los saltos de línea, que de otro modo se salta.
- u (unicode)
- Trata el patrón como puntos de código Unicode: los emoji cuentan como un carácter y funcionan los escapes de propiedad \p{…}. Sintaxis más estricta.
- v (unicodeSets)
- El sucesor más nuevo y estricto de u, que añade operaciones de conjuntos como [\p{L}--[a-z]] dentro de las clases. Solo se muestra si tu navegador lo admite.
- y (sticky)
- Cada coincidencia debe empezar exactamente donde terminó la anterior; útil para tokenizadores.
Grupos, retrorreferencias y reemplazo
Los paréntesis capturan: (\d{4})-(\d{2}) guarda el año en el grupo 1 y el mes en el grupo 2. Dale un nombre a un grupo con (?<year>\d{4}) y también estará disponible como groups.year en el código y como $<year> en un reemplazo. Usa (?:…) cuando necesites agrupar para una alternancia o un cuantificador pero no quieras capturar.
Dentro del patrón, \1 o \k<name> coincide con el mismo texto que capturó antes un grupo; así es como el patrón de palabras repetidas de la biblioteca encuentra “the the”. Las aserciones como (?=…), (?!…), (?<=…) y (?<!…) comprueban lo que viene antes o después sin consumirlo; el patrón de contraseña segura usa cuatro lookaheads para exigir cada tipo de carácter.
En la cadena de reemplazo, $& inserta la coincidencia completa, $1–$99 un grupo numerado, $<name> un grupo con nombre, $` y $' el texto antes y después de la coincidencia, y $$ un signo de dólar literal.
Cuantificadores: codiciosos y perezosos
Los cuantificadores indican cuántas veces puede repetirse el elemento que los precede: * cero o más, + una o más, ? cero o una, y {2,5} entre dos y cinco. Por defecto son codiciosos y toman todo el texto que pueden, y luego devuelven parte si el resto del patrón falla. Añade un signo de interrogación para hacer uno perezoso: <.+?> coincide con una sola etiqueta HTML, mientras que <.+> va desde el primer < hasta el último > de la línea.
La pestaña Explicar detalla esto para cada cuantificador de tu patrón, así ves de un vistazo qué partes se repiten, cuántas veces y si son codiciosas o perezosas. Las clases de caracteres como [A-Za-z0-9_] se enumeran rango a rango, y los escapes como \d, \w y \s se nombran, lo que hace mucho más rápido leer un patrón heredado de otra persona.
Backtracking catastrófico, y por qué este tester no se congela
Algunos patrones tardan un tiempo exponencial con entradas que casi coinciden. El ejemplo clásico es (a+)+$ frente a una larga serie de aes seguida de una b: el motor prueba todas las formas de repartir las aes entre la repetición interior y la exterior antes de rendirse. En producción es un riesgo real de denegación de servicio, conocido como ReDoS.
Aquí la búsqueda se ejecuta en un worker en segundo plano aparte con un límite de tiempo. Si un patrón tarda demasiado, el worker se detiene y ves un aviso en lugar de una pestaña congelada. La solución habitual es quitar cuantificadores anidados sobre los mismos caracteres, hacer que las alternativas sean mutuamente excluyentes o anclar el patrón. Los resultados se limitan a 10 000 coincidencias.
Una alternativa a regex101 centrada en JavaScript
Herramientas como regex101 admiten varios sabores de regex; esta admite a propósito exactamente uno, el motor ECMAScript de tu navegador, así que lo que coincide aquí coincide en JavaScript y TypeScript. Las funciones de PCRE como los cuantificadores posesivos, los grupos atómicos y la recursión no existen en JavaScript, y el explicador tratará su sintaxis de forma literal. La biblioteca cubre patrones que la gente busca a diario: email, URL, direcciones IPv4 e IPv6, fechas ISO, colores hex, UUID, números de teléfono E.164, slugs, horas de 24 horas y contraseñas seguras. Cada uno es un patrón pragmático, no una gramática RFC completa; valida también las entradas críticas con un analizador dedicado.
¿Trabajas con horarios en vez de cadenas? El generador de expresiones cron explica la sintaxis cron igual que esta herramienta explica las regex.
Preguntas frecuentes
- ¿Qué sabor de regex usa este tester?
- JavaScript (ECMAScript), ejecutado por el motor de tu propio navegador. Los resultados coinciden con lo que hacen RegExp, String.prototype.match y replace en Node.js, Deno, Bun y navegadores de la misma versión.
- ¿Cómo busco coincidencias en varias líneas?
- Activa el flag m para que ^ y $ coincidan en cada línea, y el flag s si el punto también debe coincidir con los saltos de línea. Sin s, usa [\s\S] para coincidir con cualquier carácter, incluido un salto de línea.
- ¿Cómo uso un grupo de captura con nombre en un reemplazo?
- Nombra el grupo con (?<name>…) y refiérete a él como $<name> en la cadena de reemplazo. Los grupos numerados son $1, $2, etc., y $& inserta la coincidencia completa.
- ¿Por qué mi regex solo encuentra la primera coincidencia?
- Sin el flag g, una regex de JavaScript se detiene tras la primera coincidencia, y replace solo cambia esa. Activa g para encontrar y reemplazar todas las apariciones.
- ¿Qué es el backtracking catastrófico?
- Es cuando un patrón con cuantificadores anidados o solapados, como (a+)+, hace que el motor pruebe un número exponencial de caminos con una entrada que casi coincide. Este tester detiene esas ejecuciones tras un límite de tiempo en lugar de congelar la página.
- ¿Cuál es una buena regex para direcciones de email?
- Un patrón práctico es [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}, que está en la biblioteca. Ninguna regex implementa por completo el estándar de email, así que la única prueba real de una dirección es enviarle un correo de confirmación.
- ¿Se envían mis datos de prueba a algún sitio?
- No. La búsqueda, el reemplazo y la explicación se ejecutan en tu navegador, así que puedes probar patrones con logs o datos de clientes sin riesgo.