Probador de regex
Prueba expresiones regulares con resaltado de coincidencias en directo.
Acerca de esta herramienta
Escribe una expresión regular de JavaScript, activa modificadores y ve cada coincidencia resaltada mientras escribes, junto con los grupos de captura y una vista previa del reemplazo.
Cómo se usa
- Escribe una expresión regular en el campo del patrón, sin las barras que la rodean.
- Activa o desactiva modificadores: g para todas las coincidencias, i para no distinguir mayúsculas y minúsculas, m para anclas multilínea, s para que . coincida con saltos de línea, u para Unicode.
- Pega un texto de prueba y verás cada coincidencia resaltada, con los grupos de captura listados debajo.
- Activa Reemplazar para previsualizar una sustitución con $1, $2 o $<name>.
Preguntas
- ¿Qué variante de regex es esta?
- JavaScript (ECMAScript). Es muy parecido a PCRE y Python para los patrones habituales, pero el soporte de lookbehind, la sintaxis de los grupos con nombre y algunos escapes varían entre lenguajes.
- ¿Cómo busco un punto o un corchete literal?
- Escápalo con una barra invertida: \. coincide con un punto, \( con un paréntesis, \[ con un corchete. Dentro de una clase de caracteres como [.] la mayoría de los caracteres pierden su significado especial.
- ¿Qué diferencia hay entre .* y .*?
- .* es voraz y coincide con todo lo posible; .*? es perezoso y coincide con lo mínimo posible. La coincidencia perezosa suele ser lo que quieres al extraer texto entre dos marcadores.
- ¿Cómo funcionan los grupos con nombre?
- Escribe (?<name>...) para capturar en un grupo con nombre. Su valor aparece en los detalles de la coincidencia y puedes usarlo en un reemplazo como $<name>.
- ¿Por qué mi regex coincide con una cadena vacía?
- Un patrón en el que todo es opcional, como a* o (\d+)?, puede coincidir con cero caracteres, y lo hace en cada posición donde no cabe nada más largo. La tabla Detalles de la coincidencia muestra estas coincidencias como (vacío). Usa + en lugar de *, o haz que al menos una parte del patrón sea obligatoria.
- ¿Cómo uso la coincidencia completa en un reemplazo?
- Escribe $& para la coincidencia completa, $1 y $2 para los grupos numerados, $<name> para los grupos con nombre y $$ para un signo de dólar literal. Por ejemplo, reemplazar \d+ por [$&] pone cada número entre corchetes. Activa la flag g para reemplazar todas las apariciones y no solo la primera.
- ¿Puede una regex bloquear el navegador?
- Sí. Los cuantificadores anidados como (a+)+ o (\w+\s?)*$ pueden hacer un backtracking exponencial con un texto que casi coincide, lo que se conoce como backtracking catastrófico. La búsqueda se ejecuta en la pestaña de tu navegador, así que la página puede quedarse colgada hasta que la cierres. Reescribe el patrón para que cada carácter solo pueda coincidir de una manera, por ejemplo a+ en lugar de (a+)+.
Flags de regex explicadas: g, i, m, s y u
Las flags de una regex cambian el comportamiento de todo el patrón. g (global) encuentra todas las coincidencias en lugar de detenerse en la primera. Sin ella, este probador resalta solo la primera coincidencia y Reemplazar cambia solo la primera aparición, exactamente igual que String.replace en JavaScript. i ignora las mayúsculas y minúsculas, así que /error/i coincide con Error y ERROR. m hace que ^ y $ coincidan al principio y al final de cada línea, algo que necesitas cuando pruebas un patrón con un archivo de log.
La flag s, llamada dotall, hace que . coincida también con los saltos de línea, así que <p>.*?</p> puede abarcar varias líneas. La flag u activa el modo Unicode: los emoji y otros caracteres fuera del plano multilingüe básico cuentan como un solo carácter, se pueden usar los escapes de propiedades Unicode y los escapes desconocidos, como \- fuera de una clase de caracteres, pasan a ser errores en lugar de aceptarse sin avisar. La flag sticky y y la flag d para los índices de coincidencia no están disponibles aquí.
Cómo probar una regex con datos reales
Prueba una expresión regular con ejemplos realistas, no solo con el caso ideal. Pega un texto que incluya valores que deberían coincidir y valores que no, y observa el resaltado. Para una fecha ISO, empieza con \d\d\d\d-\d\d-\d\d y comprueba que 2026-11-08 se resalta y 2026-1-8 no. Después fíjate en que 12026-11-08 sigue coincidiendo en parte. Añadir límites de palabra \b, o ^ y $ con la flag m, lo soluciona.
La tabla Detalles de la coincidencia lista cada coincidencia con su índice y sus grupos de captura, numerados $1, $2, etc., además de los grupos con nombre por su nombre, y es la forma más rápida de comprobar que un grupo captura lo que esperas. Para direcciones de correo, asume que ninguna regex práctica cumple del todo el RFC: un patrón como [\w.+-]+@[\w-]+\.[\w.-]+ detecta erratas, y un correo de confirmación hace la comprobación real. Para descomponer una URL, usa Codificar, decodificar y analizar URL.
Cómo usar una regex probada en JavaScript, Python y grep
Un patrón probado aquí se puede pegar directamente en un literal de regex de JavaScript como /\d+/g sin escapar nada más. Cuando lo construyes a partir de una cadena, como con new RegExp() o en la mayoría de los demás lenguajes, hay que duplicar cada barra invertida, así que \d+ pasa a ser "\\d+" dentro de un literal de cadena normal. Las cadenas raw de Python como r"\d+" y las cadenas entre comillas invertidas de Go evitan duplicarlas. Olvidarlo es el motivo más habitual de que una regex funcione en un probador pero no en el código.
Las flags se indican en sitios distintos en otros lenguajes. Python usa re.IGNORECASE o un (?i) en línea, y grep usa -i para ignorar mayúsculas y minúsculas, con -E o -P para elegir la sintaxis. El lookbehind también cambia: JavaScript permite lookbehind de longitud variable, mientras que el módulo re de Python exige un ancho fijo, así que (?<=\$|USD )\d+ falla ahí. El Generador de comandos grep y ripgrep convierte un patrón probado en un comando listo para ejecutar, con cada opción explicada.
¿Algo no funciona o un resultado parece incorrecto? Informar de un problema con esta herramienta