
Probar una regex en línea: guía práctica para depurar expresiones regulares
Prueba una regex de JavaScript, revisa los grupos de captura y previsualiza un reemplazo $1 en el navegador, antes de pasarla a producción.
Un patrón que parece correcto merece una entrada que falle
Una expresión regular es un programa pequeño. Se escribe rápido, se pega desde un comentario y sale cara cuando acepta la cadena equivocada o congela la pestaña. El probador de regex ejecuta el motor RegExp de JavaScript del navegador sobre un patrón y un texto que pegas en local — resaltado a la izquierda, tarjetas de coincidencia con grupos a la derecha, y una vista previa de reemplazo opcional. No hay selector de dialecto: no es PCRE, no es Python, no es el motor de una base de datos. Es la misma familia que Node y que la palabra clave pattern de un JSON Schema evaluado por Ajv. La página está en el hub de utilidades para desarrolladores, junto a slugify y al conversor de mayúsculas, para los trabajos que no deberían ser una expresión escrita a mano.
Dónde ayuda el probador, y dónde debe tomar el relevo un test unitario
Un patrón que vas a pegar en código, una fixture, o la palabra clave pattern de un JSON Schema.
Algunos trabajos ya tienen una herramienta que codifica las reglas. Una expresión escrita a mano se desvía.
Patrones que aguantan un vistazo y fallan con una entrada real
El probador compila el campo con new RegExp. Una construcción recursiva como (?R) es inválida aquí y muestra el error del motor. Las barras alrededor del campo son el marco de la interfaz, no parte del patrón. Pegar /(\w+)/gi quita los delimitadores y fusiona esos flags con los que ya estaban activos — no los sustituye. Si g ya estaba activo, sigue activo. La segunda trampa es la barra invertida: el campo es la fuente de la regex, así que \d significa dígitos. Pegar \\d desde una cadena JSON o Java busca una barra invertida literal seguida de d.
Sobre "one" and "two", el patrón ".+" con g devuelve una sola coincidencia: todo el tramo, de la primera comilla a la última. El motor toma todo lo que puede y luego devuelve caracteres hasta que encaja la última comilla. Pasar a ".+?" no significa «solo las palabras que querías». Con g hay dos coincidencias, "one" y "two". Perezoso significa el éxito más corto, no un filtro semántico. "[^"]*" es el patrón que no puede cruzar una comilla.
Una forma como (a+)+ frente a una larga serie de a que nunca llega al final esperado puede estallar en backtracking catastrófico. El probador no tiene un tiempo límite en el servidor. Corre en el hilo principal de la pestaña, así que la página puede congelarse. La herramienta sí limita lo que devuelve: la búsqueda global se detiene y muestra un aviso de truncado, o porque alcanzó el tope blando de 500 coincidencias, o porque un patrón de anchura cero disparó el guarda (el motor avanza un carácter tras una coincidencia vacía para que g no gire para siempre). Ese guarda no hace seguro un cuantificador anidado. La subida acepta .txt, .md y .log hasta 32 MiB en la cadena de prueba, siempre en local — un log entero más un patrón anidado es una buena forma de bloquear la pestaña.
La ficha «Email (aprox.)» es [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,} sobre [email protected] x not-an-email [email protected]. Con g resalta [email protected] y [email protected]. Es una demo, no la RFC 5322, y la página lo dice. La misma honradez vale para el modo sticky: el flag y solo coincide aquí al inicio de la cadena de prueba, porque lastIndex se reinicia en cada ejecución. No «sigue donde terminó la coincidencia anterior» de un clic a otro. Y los resultados no se actualizan mientras escribes. Cambiar el patrón, los flags, el modo o el texto borra las tarjetas hasta que vuelves a pulsar Probar.
Qué cambia de verdad cada flag y cada modo aquí
Seis flags, ningún otro. El valor por defecto es solo g.
Coincidencia lista los aciertos. Reemplazo muestra además la cadena sustituida, con los patrones de reemplazo de JavaScript.
Una captura con nombre es el mismo grupo que su número. La tarjeta lo muestra una vez.
Un caso, y luego una sola variable
En el probador de regex no se ejecuta nada mientras escribes. Las tarjetas anteriores se borran en cuanto cambian las entradas.
Escribir la fuente, no un literal
Escribe \d+, no /\d+/g. Si pegas un literal /patrón/flags, el pegado o la pérdida de foco quita los delimitadores y fusiona los flags. Un patrón vacío es un error. Un patrón inválido muestra el mensaje de JavaScript.
Activa solo el flag que quieres probar
g está activo por defecto. Apágalo para confirmar que de verdad querías una sola coincidencia. Añade m antes de fiarte de ^ en una segunda línea. Añade u antes de \p{…}: sin él, \p{L} coincide con los caracteres literales p{L}, no con letras. Deja y apagado, salvo para comprobar una coincidencia que debe empezar en el índice 0.
Pulsa Probar y lee la tarjeta, no solo el resaltado
El resaltado muestra dónde está el acierto. La tarjeta muestra el índice y cada grupo. Pulsa una tarjeta para enfatizar ese acierto. En modo reemplazo, lee la cadena sustituida bajo las tarjetas antes de copiar el patrón al código.
Las fichas son fixtures, no una biblioteca de validadores de producción.
(\w+)=(\d+) sobre user=42 role=admin env=prod\d, \w, \s, ., [], ^, $, \b, +, *, ? y () en el cursor. Corchetes y paréntesis colocan el cursor dentro.txt, .md o .log de hasta 32 MiB en la cadena de prueba, en el navegador. Prefiere un extracto corto cuando el patrón no es claramente linealEl mismo motor en Node
El RegExp de Node es el mismo lenguaje. matchAll exige el flag g. Sin g, llama a exec una vez.
Ejemplo básico
Los patrones de reemplazo son los que acepta el campo de reemplazo. Es la ficha integrada, no un lenguaje de plantillas propio.
Ejemplo básico
Sin instalación, nada se sube, flags y grupos visibles, vista previa de reemplazo incluida. La contrapartida: sin selector de dialecto, modo sticky solo en el índice 0, como mucho 500 coincidencias devueltas, y un cuantificador anidado puede congelar la pestaña porque la ejecución es local. Quédate la página para una fixture y una revisión de código. Haz commit del patrón junto a los tests cuando proteja una entrada de producción. Si la expresión solo sustituía a un slug o a un cambio de mayúsculas, pasa a slugify o al conversor de mayúsculas en lugar de mantenerla.
Conclusión
Prueba el patrón contra una cadena que deba fallar, en el motor que lo va a ejecutar. Para JavaScript ese motor es RegExp, que es el que usa el probador de regex — incluido un pattern de JSON Schema que luego compilarás con Ajv en el validador de JSON Schema. No tomes la ficha Email (aprox.) por un validador, no esperes que el flag y retome a mitad de la cadena, y no des un log de 32 MiB a un cuantificador anidado. Cuando el trabajo es un slug o un cambio de mayúsculas, deja la expresión y usa la herramienta dedicada en el hub de utilidades para desarrolladores.
Artículos relacionados

UUID v4 aleatorio, UUID v7 y ULID ordenables, Nanoid compacto: comparativa y generadores en línea para claves primarias e IDs públicos.

Calcula una huella MD5 o SHA, o firma un mensaje con HMAC, en el navegador. Hex, Base64 o Base64URL — checksums de texto y firmas webhook, 100 % local.

Evita SSH y nginx para un side project Next.js. Compara Railway, Render, Vercel y un VPS, y despliega desde Git tras minificar los assets en el navegador.