Probador Regex & Depurador RegExp

Probador Regex & Depurador RegExpVersión del motor

Prueba, depura y optimiza expresiones regulares en tiempo real. Inspecciona coincidencias de patrones, grupos de captura, desglose de tokens y sintaxis de sustitución.

Variante de motor RegExp
Terminaciones de línea
Plantillas rápidas
Banco de trabajo de expresiones regulares
//gm
Paleta de tokens rápidos
Reach out to [email protected]#1 or [email protected]#2 for inquiries. Invalid addresses like john..doe@bad#3_domain or @missing-user.org should be ignored. Admin contact: [email protected]#4.
Detalle de coincidencias y gruposTotal de coincidencias: 4
Palabra coincidente #1: "[email protected]"Pos:: [13:32] (19 caracteres)
<user>: "support"<domain>: "toolsaa.com"
Palabra coincidente #2: "[email protected]"Pos:: [36:66] (30 caracteres)
<user>: "sales.dept"<domain>: "enterprise-cloud.io"
Palabra coincidente #3: "john..doe@bad"Pos:: [105:118] (13 caracteres)
<user>: "john..doe"<domain>: "bad"
Palabra coincidente #4: "[email protected]"Pos:: [181:212] (31 caracteres)
<user>: "sec-ops"<domain>: "datacenter.internal.net"
Coincidencias
4
Grupos de captura
2 grupos
Estado ReDoS
Protegido

Procesamiento en el cliente

Cálculo de alto rendimiento ejecutado íntegramente en la memoria del navegador.

Sin subida al servidor

Todos los datos permanecen estrictamente locales sin comunicación con servidores externos.

Exportación lista para producción

Formatos de salida limpios y optimizados, listos para su integración inmediata.

Referencia técnica y guía de arquitectura

Probador & Depurador de Regex — Guía de referencia

Prueba, depura y optimiza expresiones regulares en tiempo real. Inspecciona coincidencias de patrones, grupos de captura, desglose de tokens y sintaxis de reemplazo.

Probador & Depurador de Regex — Guía de referencia — Arquitectura en memoria del lado del cliente y flujo de datos
Probador & Depurador de Regex — Guía de referencia — Arquitectura en memoria del lado del cliente y flujo de datos

Parámetros clave y controles

Patrón de expresión regularCadena de sintaxis RegExp

Literal de expresión regular estándar que contiene clases de caracteres, anclas, cuantificadores y grupos de captura conforme a las especificaciones ECMAScript RegExp.

Por defecto: /(?<user>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/gm
Flags de ejecución de regexCadena de flags (máscara de bits)

Modificadores de compilación activos que alteran el comportamiento del motor en tiempo de ejecución: g (búsqueda global), i (insensible a mayúsculas y minúsculas), m (anclas multilínea ^ y $), s (modo dotAll donde el punto coincide con saltos de línea), u (soporte de puntos de código Unicode) e y (coincidencia persistente 'sticky' en lastIndex).

Por defecto: gm
Texto objetivo de pruebaCadena de texto sin procesar

Documento o corpus multilínea de entrada sobre el que se ejecuta la expresión regular para detectar coincidencias, evaluar grupos de captura y auditar el rendimiento.

Por defecto: sample text corpus
Plantilla de sustituciónCadena de reemplazo

Patrón de plantilla para sustitución de cadenas compatible con referencias hacia atrás posicionales ($1, $2), identificadores de grupos de captura con nombre ($<name>), texto coincidente completo ($&) y segmentos adyacentes ($`, $').

Por defecto: $<user> at $<domain>

Consejos profesionales y mejores prácticas

Evita el backtracking catastrófico (ReDoS) mediante tokens mutuamente excluyentes

Los cuantificadores anidados e ilimitados como (a+)+ o (.*a)+ obligan a los motores de autómatas finitos no deterministas (NFA) a evaluar O(2^n) estados frente a entradas fallidas. Elimina clases de caracteres solapadas dentro de repeticiones y prioriza agrupaciones atómicas, cuantificadores posesivos o conjuntos estrictamente negados como [^a]*a.

Cuidado con la propiedad con estado lastIndex al usar los flags global (g) y sticky (y)

Cuando una instancia de RegExp activa el flag /g o /y, el motor nativo de JavaScript conserva un puntero interno lastIndex que avanza tras cada coincidencia. Invocar regex.test() de forma reiterada sobre la misma cadena alternará entre true y false a menos que restablezcas explícitamente regex.lastIndex = 0 antes de la ejecución.

Exige el flag Unicode (u o v) para caracteres astronómicos multibyte y emojis

El motor estándar de regex en JavaScript sin el flag /u interpreta los pares subrogados UTF-16 de 4 bytes como dos unidades de código de 2 bytes independientes. Un comodín punto (.) no coincidirá con un emoji como 🚀 (\uD83D\uDE80) como un único carácter a menos que actives /u o /v, y los rangos como [\u{1F600}-\u{1F64F}] arrojarán errores de sintaxis.

Diferencia el flag multilínea (m) del flag dotAll (s) al procesar saltos de línea

El flag /m únicamente redefine las anclas ^ y $ para que coincidan con el inicio y fin de cada línea individual dentro de un texto multilínea, en lugar de todo el documento. NO permite que el comodín punto (.) coincida con saltos de línea (\n) o retornos de carro (\r); para abarcar saltos de línea con el punto, debes habilitar explícitamente el flag /s (dotAll).

Problemas comunes y soluciones

⚠️Atrapamiento involuntario por cuantificadores codiciosos que devoran múltiples bloques HTML/XML

Los cuantificadores estándar (*, +, {n,}) son codiciosos (greedy) por defecto y consumen la máxima cantidad de texto posible. Para detener la captura en el delimitador más próximo, añade un signo de interrogación para crear un cuantificador perezoso (por ejemplo, cambia <div.*> por <div.*?>) o recurre a una clase de caracteres negada (como <[^>]*>).

⚠️Barras inclinadas sin escapar o metacaracteres reservados provocando errores de sintaxis

Los caracteres con función sintáctica especial en regex (\, ^, $, ., |, ?, *, +, (, ), [, ], {, }) deben escaparse con una barra invertida previa al buscar coincidencias literales. Al construir patrones dinámicamente mediante new RegExp(), recuerda que se requiere doble escape (\\) en el código fuente.

⚠️Confusión entre aserción negativa posterior (?!patrón) y clase negada [^caracteres]

Una clase de caracteres negada [^abc] consume exactamente un único carácter que no sea 'a', 'b' ni 'c'. Por el contrario, una aserción negativa posterior o lookahead negativo (?!abc) es una aserción de ancho cero que comprueba si la secuencia siguiente no es 'abc' sin consumir ningún carácter de la cadena.

Preguntas frecuentes (FAQ)

¿Cómo probar regex evitando la vulnerabilidad de backtracking catastrófico ReDoS?▼

El backtracking catastrófico ocurre cuando un motor NFA se enfrenta a cuantificadores anidados con subpatrones solapados (como (a+)+$ o (x|y+)*) evaluados contra cadenas no coincidentes, disparando una complejidad temporal exponencial O(2^n). Para prevenirlo, comprueba que los grupos repetidos sean mutuamente excluyentes, sustituye comodines codiciosos como .* por clases negadas estrictas como [^\n,]+ y audita el tiempo de cómputo frente a casos de prueba no coincidentes.

¿Cuál es la diferencia entre cuantificadores codiciosos, perezosos y posesivos?▼

Los cuantificadores codiciosos o greedy (*, +, {min,max}) abarcan la mayor cantidad de texto posible y retroceden (backtrack) paso a paso si el patrón global falla. Los cuantificadores perezosos o lazy (*?, +?, {min,max}?) consumen la menor cantidad de texto indispensable, expandiéndose carácter a carácter según se requiera. Los cuantificadores posesivos (*+, ++, {min,max}+), admitidos en PCRE y Java, consumen todo de forma voraz y jamás retroceden, fallando de inmediato si los tokens posteriores no coinciden.

¿Por qué regex.test devuelve true y luego false con cadenas idénticas?▼

Al compilar una expresión regular con el flag global (/g) o sticky (/y) en JavaScript, el objeto RegExp mantiene estado actualizando su propiedad interna lastIndex al índice inmediatamente posterior a la última coincidencia válida. En una segunda invocación, la búsqueda arranca en lastIndex en vez de 0; al alcanzar el final de la cadena, se reinicia a 0 y retorna false. Restablece regexObject.lastIndex = 0 antes de ejecuciones consecutivas.

¿Cómo hacer coincidir texto a través de múltiples líneas con saltos en regex?▼

Para abarcar saltos de línea, habilita el flag dotAll (/s), el cual configura el comodín punto (.) para que coincida con caracteres de nueva línea (\n, \r) en ECMAScript 2018+, Python y motores contemporáneos. En entornos que carezcan de soporte para /s, utiliza el conjunto de caracteres complementario [\s\S] o [\d\D], que coincide con cualquier carácter con o sin espacio en blanco, cubriendo eficazmente todos los saltos.

¿Qué diferencia existe entre grupos de captura y grupos sin captura?▼

Los grupos de captura delimitados como (patrón) almacenan la subcadena coincidente en memoria, le asignan un índice numérico de referencia ($1, $2, ...) y la exponen en los arrays de resultados. Los grupos sin captura definidos como (?:patrón) aplican lógica de agrupación, cuantificadores o alternativas sin asignar sobrecarga de memoria ni poblar los arrays de resultados, optimizando significativamente la velocidad de procesamiento.

Herramientas y utilidades relacionadas

Todas las herramientas →