Probador y Depurador de Regex
Prueba expresiones regulares de JavaScript en vivo con resaltado de coincidencias, grupos de captura y vista previa de reemplazo.
Cargando Probador y Depurador de Regex… Si no ocurre nada, activa JavaScript.
Las expresiones regulares (regex o regexp) son un lenguaje formal para describir patrones en texto. La teoría se remonta al matemático Stephen Cole Kleene, que formalizó el álgebra de los lenguajes regulares en 1956, y a Ken Thompson, que implementó regex en el editor QED y en las herramientas originales de Unix grep, sed y awk en los años 60 y 70. Los motores de regex modernos amplían el fundamento teórico con funciones prácticas como las anticipaciones (lookaheads), las retrorreferencias (backreferences) y los grupos de captura con nombre, lo que las convierte en una de las herramientas de procesamiento de texto más potentes disponibles en cualquier lenguaje de programación.
Ejemplos
\b\w+@\w+\.\w+\b on "a@b.com x@y.org"
2 matches: a@b.com, x@y.org
Los grupos de captura y las banderas (g, i, m) se muestran en vivo a medida que escribes.
Preguntas frecuentes
¿Se envía mi entrada a un servidor?
¿Qué variante de regex usa esta herramienta?
¿Cuándo debería usar una regex en lugar de métodos de cadena simples?
¿En qué se diferencia la regex de JavaScript de PCRE (Python, PHP, Perl)?
¿Cuáles son las banderas disponibles y qué hacen?
¿Hay un límite en la longitud de la cadena de prueba o del patrón?
¿Puedo usar esto para probar un patrón de reemplazo?
¿Qué es el retroceso catastrófico y cómo lo evito?
¿Cuál es la diferencia entre un grupo de captura y uno sin captura?
¿Cuál es un error común de principiante con las expresiones regulares?
Acerca de Probador y Depurador de Regex
Las expresiones regulares son indispensables para una amplia variedad de tareas del mundo real. La validación de formularios, comprobar que una dirección de correo, un número de teléfono o un código postal coinciden con el formato esperado, usa casi universalmente regex. Los analizadores de logs extraen campos estructurados de líneas de log no estructuradas usando grupos de captura. Los editores de código y los IDE usan regex para buscar y reemplazar en grandes bases de código. Las herramientas de seguridad usan regex para detectar patrones de inyección y fugas de datos sensibles. Las canalizaciones de transformación de datos usan regex para normalizar formatos inconsistentes. Las configuraciones de dispositivos de red se auditan con regex. Entender y depurar un patrón de regex de forma interactiva es mucho más rápido que ejecutar un script repetidamente.
Este probador evalúa expresiones regulares de JavaScript contra tu entrada en tiempo real, resaltando cada coincidencia a medida que escribes. Enumera todos los grupos de captura (numerados y con nombre) de cada coincidencia para que puedas ver de inmediato qué capturó cada grupo. Un modo de reemplazo te permite escribir una plantilla de reemplazo y previsualizar el resultado de String.prototype.replace o replaceAll, con soporte para las retrorreferencias $1, $2 y $<name>. Todo se ejecuta enteramente en el motor de JavaScript de tu navegador; tus patrones y tu texto de entrada nunca se envían a ningún servidor.
La regex es célebre por lo fácil que es equivocarse de forma sutil. Un punto a secas (.) coincide con cualquier carácter, incluidos los saltos de línea en algunos modos, no solo con un punto literal. Los cuantificadores codiciosos (*, +) coincidirán con todo lo posible, capturando a menudo más de lo previsto; usa las versiones perezosas (*?, +?) para coincidir con lo menos posible. Los anclajes ^ y $ coinciden con el inicio y el final de toda la cadena de forma predeterminada; añade la bandera multilínea (m) si quieres que coincidan en los límites de línea. El retroceso catastrófico, donde una regex mal escrita provoca un tiempo de coincidencia exponencial con una entrada adversaria, es un riesgo real de denegación de servicio en aplicaciones web que aplican patrones proporcionados por el usuario a texto proporcionado por el usuario.
De la teoría de lenguajes formales a grep
El concepto de las expresiones regulares se origina en la informática teórica. En 1956, el matemático Stephen Cole Kleene publicó un artículo que describía los 'eventos regulares', conjuntos de cadenas que podían describirse mediante un autómata finito, e introdujo la notación algebraica que se convertiría en la sintaxis de regex. El operador estrella (*), llamado la estrella de Kleene, lleva su nombre. En ese momento, las expresiones regulares eran puramente una abstracción matemática sin conexión con la práctica de la computación.
El salto de la teoría a la herramienta llegó en 1968, cuando Ken Thompson implementó la búsqueda con regex en el editor de texto QED y luego en la herramienta de Unix grep (cuyo nombre proviene de 'globally search a regular expression and print'). La innovación clave de Thompson fue un algoritmo eficiente que convertía una expresión regular en un autómata finito no determinista (NFA) y lo simulaba, garantizando una coincidencia en tiempo lineal sin retroceso catastrófico. Muchos motores de regex modernos abandonaron el enfoque NFA de Thompson en favor de motores con retroceso que admiten más funciones (como las retrorreferencias) pero que pueden exhibir un comportamiento exponencial en el peor de los casos.
Hoy, las expresiones regulares se admiten de forma nativa en prácticamente todos los lenguajes de programación y editores de texto. Sin embargo, la sintaxis se ha fragmentado en docenas de variantes incompatibles, POSIX BRE, POSIX ERE, PCRE, .NET, Java, Python, JavaScript, Ruby, cada una con sutiles diferencias en sintaxis y semántica. Una regex escrita para un lenguaje a menudo funcionará en otro, pero abundan los casos límite. Esta fragmentación es la razón por la que siempre se recomienda probar un patrón en el motor concreto que vayas a usar antes de desplegarlo en producción.