lab.m8d.io
Panel/Desarrollo/Tester Regex

Tester Regex

Expresiones regulares en tiempo real

Desarrollo
Expresión Regular
//g
global

Texto de prueba

0 caracteres1 línea(s)

Escribe una expresión regular y texto de prueba

Resaltado en tiempo real · Grupos · Reemplazo · Referencia

Acerca de esta herramienta

El Tester de Regex de lab.m8d.io permite probar expresiones regulares en tiempo real contra cualquier texto. Muestra coincidencias resaltadas, detalles de cada match (posición, longitud, grupos nombrados), estadísticas, modo de reemplazo con tokens ($1, $&) y una referencia rápida de sintaxis. Todo se ejecuta localmente en el navegador — ningún dato se envía a servidores externos.

Qué son las expresiones regulares

Las expresiones regulares (regex o regexp) son patrones de búsqueda que describen conjuntos de cadenas de texto. Son una herramienta fundamental en programación, administración de sistemas y análisis de datos. • Origen — El concepto fue formalizado por el matemático Stephen Kleene en 1956 como parte de la teoría de autómatas. Ken Thompson las implementó en el editor ed de Unix en 1968, y desde entonces forman parte esencial de prácticamente todos los lenguajes de programación. • Motor JavaScript — Este tester usa el motor de expresiones regulares nativo del navegador (ECMAScript RegExp). Soporta todas las características modernas: Unicode (flag u), dotAll (flag s), lookbehind ((?<=...) y (?<!...)), grupos nombrados ((?<name>...)) e índices de coincidencia (flag d). • Complejidad — Las expresiones regulares de JavaScript usan un motor NFA (Nondeterministic Finite Automaton) con backtracking. Patrones mal construidos con cuantificadores anidados (como (a+)+ o (a|aa)*) pueden causar backtracking catastrófico (ReDoS). Esta herramienta limita los resultados a 500 coincidencias para proteger contra patrones patológicos.

Flags (modificadores) disponibles

Cada flag modifica el comportamiento del motor de regex: • g (global) — Busca todas las coincidencias en el texto, no solo la primera. Sin esta flag, el motor se detiene tras el primer match. Es la flag más común y está activada por defecto en esta herramienta. • i (case-insensitive) — Ignora la distinción entre mayúsculas y minúsculas. /abc/i coincide con "ABC", "Abc", "aBc", etc. Aplica tanto a caracteres ASCII como a caracteres Unicode cuando se combina con la flag u. • m (multiline) — Cambia el comportamiento de ^ y $. Sin esta flag, ^ coincide solo con el inicio de toda la cadena y $ con el final. Con m, ^ coincide con el inicio de cada línea y $ con el final de cada línea. • s (dotAll) — Hace que el punto (.) coincida con CUALQUIER carácter, incluyendo saltos de línea (\n, \r). Sin esta flag, el punto no coincide con caracteres de nueva línea, lo cual es una fuente frecuente de errores. • u (unicode) — Habilita el modo Unicode completo. Los patrones como \p{Emoji} y \p{Script=Latin} funcionan solo con esta flag. También hace que cuantificadores como {1,3} lancen error si se aplican incorrectamente, en lugar de interpretarse como texto literal. • d (hasIndices) — Genera información de índices de inicio y fin para cada grupo de captura, no solo para la coincidencia completa. Útil para resaltado preciso y manipulación de texto por posición.

Modo de reemplazo

La pestaña de reemplazo permite transformar el texto usando la expresión regular como patrón de búsqueda. Los tokens especiales en la cadena de reemplazo son: • $& — Inserta la coincidencia completa. • $1, $2, ... $n — Inserta el contenido del grupo de captura n-ésimo. • $<name> — Inserta el contenido del grupo nombrado ((?<name>...)). • $` — Inserta el texto anterior a la coincidencia. • $' — Inserta el texto posterior a la coincidencia. • $$ — Inserta un signo de dólar literal. Ejemplo: Con el patrón (\w+)@(\w+\.\w+) y el reemplazo "Usuario: $1, Dominio: $2", el texto "admin@ejemplo.com" se transforma en "Usuario: admin, Dominio: ejemplo.com". El resultado de reemplazo se calcula en tiempo real y se puede copiar directamente.

Casos de uso comunes

Las expresiones regulares se utilizan extensivamente en: • Validación de formularios — Emails, teléfonos, códigos postales, URLs, IPs, tarjetas de crédito. Es el uso más visible para los usuarios finales. • Búsqueda y reemplazo — En editores de código (VS Code, Sublime, Vim), herramientas de línea de comandos (grep, sed, awk) y procesamiento de texto en cualquier lenguaje. • Web scraping — Extracción de datos de HTML/XML cuando no se dispone de un parser DOM. Aunque no se recomienda parsear HTML completo con regex, es práctico para extraer patrones específicos. • Análisis de logs — Parseo de archivos de log de servidores web (Apache, Nginx), firewalls, aplicaciones. Herramientas como Elasticsearch, Logstash y Splunk usan regex extensivamente. • Seguridad — Reglas WAF (Web Application Firewall), detección de patrones de ataque (SQL injection, XSS), validación de input. También en análisis forense digital para buscar indicadores de compromiso (IOCs). • ETL y datos — Limpieza y transformación de datos, normalización de formatos, extracción de campos de texto no estructurado.

Preguntas frecuentes

¿Qué diferencia hay entre * y + en regex?
El cuantificador * (asterisco) coincide con 0 o más repeticiones del elemento anterior — es decir, el elemento es opcional y puede repetirse indefinidamente. El cuantificador + (más) requiere al menos 1 repetición. Por ejemplo, /ab*c/ coincide con 'ac' (0 b's), 'abc' y 'abbc', mientras que /ab+c/ NO coincide con 'ac' porque exige al menos una 'b'. En la práctica, + es más seguro para validación porque evita coincidencias vacías accidentales.
¿Qué son los grupos de captura nombrados?
Los grupos nombrados se definen con la sintaxis (?<nombre>...) y permiten asignar un nombre descriptivo a un grupo de captura en lugar de referenciarlo por número. Por ejemplo, /(?<año>\d{4})-(?<mes>\d{2})-(?<día>\d{2})/ captura una fecha ISO y permite acceder a cada parte por nombre. En el resultado de esta herramienta, los grupos nombrados se muestran debajo de cada coincidencia con etiquetas de color púrpura. En código JavaScript, se acceden vía match.groups.año.
¿Qué es el backtracking catastrófico (ReDoS)?
ReDoS (Regular Expression Denial of Service) ocurre cuando un patrón regex con cuantificadores anidados causa que el motor explore un número exponencial de caminos posibles. El ejemplo clásico es (a+)+ aplicado a una cadena como 'aaaaaaaaaaaaaaaaab' — el motor prueba todas las combinaciones posibles de dividir las a's entre los dos cuantificadores antes de determinar que no hay coincidencia. Esto puede congelar el navegador o servidor. Para prevenirlo: evita cuantificadores anidados sobre el mismo patrón, usa cuantificadores posesivos (a++ en motores que lo soporten), y establece límites de tiempo de ejecución.
¿Esta herramienta envía mis datos a algún servidor?
No. El Tester de Regex se ejecuta completamente en el navegador usando el motor RegExp nativo de JavaScript. Ni la expresión regular ni el texto de prueba se envían a ningún servidor. Puedes verificarlo en la pestaña Network de las herramientas de desarrollo del navegador — no se generan peticiones de red durante el uso de la herramienta. Esto lo hace seguro para probar patrones con datos sensibles.
¿Qué diferencia hay entre greedy y lazy en cuantificadores?
Los cuantificadores por defecto son greedy (codiciosos): consumen la mayor cantidad de texto posible. Añadiendo ? después del cuantificador se vuelven lazy (perezosos): consumen la menor cantidad posible. Por ejemplo, aplicando /<.+>/ al texto '<b>hola</b>', el cuantificador greedy coincide con todo '<b>hola</b>' (de < a >), mientras que /<.+?>/ coincide primero con '<b>' y luego con '</b>' por separado. Lazy es especialmente útil al extraer contenido entre delimitadores.