Probador y depurador de Regex
Prueba expresiones regulares con resaltado en tiempo real y grupos de captura.
Coincidencias resaltadas
Detalles de la coincidencia
0 matchesReferencia rápida
.Cualquier carácter excepto salto de línea
\dDígito (0-9)
\wCarácter de palabra (a-z, A-Z, 0-9, _)
\sEspacio en blanco (espacio, tabulador, salto de línea)
^Inicio de cadena (o línea con flag m)
$Fin de cadena (o línea con flag m)
*0 o más del anterior
+1 o más del anterior
?0 o 1 del anterior
{n,m}Entre n y m del anterior
[abc]Clase de caracteres: a, b o c
[^abc]Ni a, b ni c
(abc)Grupo de captura
(?:abc)Grupo no captura
a|ba o b
\bLímite de palabra
(?=abc)Lookahead positivo
(?!abc)Lookahead negativo
Sobre las expresiones regulares
Las expresiones regulares (regex) son patrones usados para buscar combinaciones de caracteres en cadenas. Son una herramienta esencial en programación, procesamiento de texto, validación de datos y operaciones de búsqueda. Todos los lenguajes de programación importantes admiten regex · JavaScript, Python, Java, PHP, Ruby, Go y más.
Este probador utiliza el motor RegExp integrado de JavaScript, que admite la sintaxis regex de ECMAScript, incluyendo lookaheads, clases de caracteres, cuantificadores y los flags g, i, m y s. Las coincidencias se resaltan en tiempo real mientras escribes, y los grupos de captura se muestran en el panel de detalles de la coincidencia.
Usos comunes
- Validar direcciones de correo, números de teléfono y entradas de formularios
- Extraer datos de archivos de registro, CSVs o HTML
- Buscar y reemplazar patrones de texto en editores de código
- Analizar URLs, rutas de archivos y texto estructurado
- Escribir selectores de web scraping y filtros de búsqueda
Preguntas frecuentes
¿Qué hacen los flags g, i, m y s?
g (global) encuentra todas las coincidencias en lugar de detenerse en la primera. i (insensible a mayúsculas) ignora la diferencia entre mayúsculas y minúsculas. m (multilínea) hace que ^ y $ coincidan con el inicio/fin de cada línea. s (dotAll) hace que . coincida también con saltos de línea.
¿Funcionará este regex en Python / Java / PHP?
La mayor parte de la sintaxis regex es común entre lenguajes. Sin embargo, hay diferencias · por ejemplo, JavaScript no admite lookbehinds en todos los navegadores (aunque los modernos sí), y Python usa una sintaxis diferente para grupos con nombre. Para patrones básicos, lo que funciona aquí funcionará en todas partes.
¿Se envían mis datos de prueba a algún lugar?
No. Toda la coincidencia regex ocurre localmente en tu navegador usando el motor RegExp nativo de JavaScript. Nada se envía a ningún servidor.
¿Qué es un probador de regex?
Un probador de regex es un editor interactivo que ejecuta una expresión regular contra una cadena de muestra y le muestra exactamente qué coincidió, qué no, y qué contienen los grupos de captura. El probador le permite iterar rápidamente: escriba el patrón, vea los resaltados, ajuste, repita. Reemplaza el ciclo lento de editar código fuente, ejecutar un script y leer la salida de la consola.
Las expresiones regulares mismas son una sintaxis de patrones inventada por Stephen Cole Kleene en 1956 para describir conjuntos de cadenas. Las implementaciones modernas de regex (PCRE, RegExp de JavaScript, re de Python, System.Text.RegularExpressions de .NET, java.util.regex de Java) comparten la mayor parte de su sintaxis pero difieren en casos límite como lookbehinds, grupos nombrados, manejo Unicode y comportamiento de cuantificadores.
Este probador usa el motor RegExp nativo de JavaScript de su navegador, que implementa la regex ECMAScript 2024 incluyendo todas las banderas estándar (g, i, m, s, u, y, d) y los lookbehinds modernos. La salida es exactamente lo que su código front-end verá en tiempo de ejecución, lo que hace al probador especialmente útil al depurar validación del lado del cliente, selectores de scraping, o transformaciones replace-with-callback.
Lo que hay dentro del probador
La fila superior contiene la entrada del patrón flanqueada por barras inclinadas, seguida de botones de alternancia para las cuatro banderas más usadas (g, i, m, s). Un botón Patrones abre una biblioteca de fragmentos comunes de regex (email, URL, teléfono, fecha) que puede hacer clic para llenar el campo del patrón. Detrás de escena la entrada está debounced para que reescribir no agote al matcher.
Debajo del patrón, el área de texto Cadena de Prueba es donde pega el texto de muestra. Las coincidencias se resaltan con un fondo amarillo en el panel Coincidencias Resaltadas que se actualiza mientras escribe. El campo Reemplazar con acepta una cadena de reemplazo con referencias hacia atrás ($1, $2, etc.) y muestra el texto resultante en vivo, perfecto para probar transformaciones de reemplazo de cadena antes de pegarlas en su código.
La lista Detalles de Coincidencia muestra cada coincidencia con su índice basado en cero en la fuente, la subcadena coincidente y cada grupo de captura. Una tarjeta Referencia Rápida en la parte inferior recapitula la sintaxis para clases de caracteres, cuantificadores, anclajes y lookarounds, para que no tenga que cambiar de contexto a una pestaña de documentación para lo básico.
Historia y contexto
Stephen Cole Kleene define eventos regulares (1956)
El matemático Stephen Cole Kleene publicó el artículo Representation of Events in Nerve Nets and Finite Automata en 1956, introduciendo lo que llamaba eventos regulares: patrones que describen conjuntos de cadenas aceptadas por un autómata finito. La estrella de Kleene (el operador *) lleva su nombre. Su notación algebraica es la ancestra directa de cada sintaxis de regex en uso hoy.
Ken Thompson lanza grep (1968)
Ken Thompson en Bell Labs implementó un motor regex en 1968 dentro del editor QED y nuevamente en grep (1973), la utilidad Unix cuyo nombre proviene del comando QED g/regular-expression/p. El motor basado en NFA de Thompson corría en tiempo lineal por carácter, una garantía que los motores de retroceso luego perdieron al añadir características como referencias hacia atrás.
Perl 5 introduce regex extendido (1994)
Larry Wall lanzó Perl 5 en 1994 con un sabor regex que añadió lookaheads, lookbehinds, capturas nombradas (más tarde), modificadores en línea y referencias hacia atrás. La regex de Perl 5 se volvió tan dominante que otros lenguajes copiaron su sintaxis. Philip Hazel creó PCRE (Perl Compatible Regular Expressions) en 1997 como biblioteca C, y PCRE hoy alimenta la regex en PHP, Apache, NGINX y muchas otras herramientas.
JavaScript lanza RegExp (1995, formalizado 1999)
JavaScript 1.0 de Brendan Eich en 1995 lanzó con un objeto RegExp modelado en Perl 5. La edición 3 de ECMAScript (1999) formalizó la sintaxis. Ediciones posteriores añadieron la bandera Unicode u (ES2015), bandera sticky y (ES2015), grupos nombrados (ES2018), lookbehinds (ES2018) y bandera de índices d (ES2022). Los navegadores se pusieron al día con el tiempo, y los motores modernos (V8, SpiderMonkey, JavaScriptCore) implementan la especificación completa ES2024.
ReDoS, denegación de servicio por regex (desde 2003)
Los investigadores notaron que los motores regex con retroceso pueden tomar tiempo exponencial en ciertas entradas, una clase de vulnerabilidad llamada ReDoS (Regular expression Denial of Service). Un apagón de Cloudflare en 2019 se rastreó a un regex con retroceso catastrófico. Herramientas como rxxr y node-re2 surgieron para detectar o sortear el problema, y los motores comenzaron a hacer cumplir presupuestos de tiempo en coincidencias de larga duración.
Los escapes de propiedad Unicode aterrizan en ECMAScript (2018)
ES2018 añadió escapes de propiedad Unicode como \p{Script=Latin} o \p{Letter}, que le permiten coincidir por categoría Unicode sin enumerar puntos de código. Combinado con la bandera u, regex ahora puede distinguir emoji de letras, scripts entre sí y manejar correctamente pares sustitutos. Esto hace que la regex de JavaScript finalmente sea adecuada para coincidencia de texto internacional, un problema que la antigua sintaxis solo ASCII no podía resolver.
Flujos de trabajo prácticos
Validación de email
Suelte una muestra de emails válidos e inválidos en el área de prueba, escriba su regex candidato (un punto de partida común es ^[^@\s]+@[^@\s]+\.[^@\s]+$), y modifique hasta que los emails válidos se resalten y los inválidos no. Tenga en cuenta que la especificación completa de email RFC 5321 es tan compleja que la regex de email perfecta tiene cientos de caracteres. Una regex pragmática captura errores de escritura; la validación final debería ir y volver a través de SMTP real.
Análisis y extracción de URL
Pegue una página de HTML o texto plano y escriba una regex para extraer URLs. Un patrón inicial como https?:\/\/\S+ atrapa la mayoría de los casos. Para código de producción, prefiera el constructor URL (new URL(string)) que maneja cada caso límite; regex es mejor para extracciones rápidas ocasionales o análisis de registros.
Scraping de archivos de registro
Los registros Apache y NGINX siguen un formato fijo. Pegue algunas líneas de registro, escriba una regex con capturas nombradas ((?
Buscar y reemplazar en editores de código
VSCode, Sublime Text, IDEs de JetBrains y vim todos aceptan regex en sus diálogos de buscar-reemplazar. Itere sobre el patrón aquí primero, con el resaltador en vivo mostrando exactamente qué coincide, luego pegue la regex en el diálogo del editor. Ahórrese el dolor de fallos en una base de código de 5,000 líneas.
Scraping web de nombres de clases CSS
Cuando necesita extraer datos de HTML sin un analizador (un script único, no para producción), una regex como class="([^"]+)" extrae atributos de clase. Para cualquier cosa más allá de una exploración rápida, cambie a una biblioteca DOM apropiada; HTML no es un lenguaje regular y la regex pierde casos límite.
Validar cadenas de versión semántica
Semver sigue ^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$. Suelte una lista de versiones (1.0.0, 1.2.3-beta.1+build.456) en el área de prueba para verificar que la regex atrapa correctamente metadatos de pre-lanzamiento y compilación. Esto es útil al validar dependencias en scripts CI.
Trampas comunes
Cuantificadores codiciosos vs perezosos
Por defecto *, + y ? son codiciosos: coinciden tanto como sea posible, luego retroceden si el resto de la regex falla. Las versiones perezosas *?, +?, ?? coinciden tan poco como sea posible. El ejemplo clásico es <.*> en texto que coincide con toda la cadena, mientras que <.*?> coincide con solo y por separado. Elija el correcto para evitar sorpresas de sobre-coincidencia.
Retroceso catastrófico (ReDoS)
Cuantificadores anidados como (a+)+ o (.*)* en una entrada larga sin coincidencia pueden tomar tiempo exponencial mientras el motor prueba cada combinación. La pestaña del navegador puede congelarse o colapsar. Evite grupos de cuantificadores superpuestos, prefiera grupos atómicos (?>...) donde estén soportados, o pre-valide la longitud de entrada. La biblioteca npm safe-regex marca automáticamente los patrones riesgosos.
Los caracteres especiales necesitan escape
Los caracteres con significado especial en regex (. * + ? ^ $ ( ) [ ] { } | \) deben escaparse con una barra inversa para coincidir literalmente. Así \. coincide con un punto, mientras . coincide con cualquier carácter. Olvidar escapar es la causa más común de falsos positivos al validar IPs, extensiones de archivo o números de versión con puntos.
Anclajes y bandera multilínea
Sin la bandera m, ^ y $ coinciden solo con el inicio y final de toda la cadena. Con m, coinciden con el inicio y final de cada línea. Si su regex funciona en líneas únicas pero falla en entrada multilínea, alterne m. Por el contrario, si coincide demasiado en entrada multilínea, quite m.
Diferencias de sintaxis entre motores
Este probador usa regex de JavaScript. re de Python usa (?P
Unicode sin la bandera u
Sin la bandera u, la regex de JavaScript trata pares sustitutos (emoji, suplemento CJK) como dos unidades de código separadas. \u{1F600} (emoji cara sonriente) no funciona sin u. Con la bandera u, la regex se vuelve consciente de Unicode, escapes de propiedad como \p{Letter} se vuelven disponibles, y el manejo de pares sustitutos es correcto. Siempre establezca u al coincidir texto internacional.
Privacidad y manejo de datos
Cada regex es compilada y ejecutada por el motor RegExp de su navegador. No enviamos su patrón, su cadena de prueba, o su plantilla de reemplazo a ningún servidor. El matcher corre localmente, los resaltados se renderizan localmente, y la lista de detalles de coincidencia se computa localmente. No hay analíticas vinculadas al contenido de sus entradas.
Una vez cargada la página, el probador funciona sin conexión. Puede desconectarse de la red, pegar líneas de registro sensibles o PII, y ejecutar patrones contra ellas sin que nada salga de su dispositivo. Esto hace a la herramienta segura para probar regex contra datos de producción sin enviarlos a través de un servicio de terceros.
Cuándo no usar una regex
Analizar HTML o XML
HTML no es un lenguaje regular. No puede analizar de forma confiable etiquetas anidadas con regex; la famosa respuesta de Stack Overflow sobre Zalgo y Cthulhu hace este punto coloridamente. Use DOMParser o una biblioteca como cheerio (Node.js) o BeautifulSoup (Python) en su lugar. La regex está bien para extracciones únicas pero falla en casos límite como etiquetas autocerrantes, comentarios, CDATA, y entrada malformada.
Cualquier cosa verdaderamente recursiva (JSON, código fuente, expresiones matemáticas)
Llaves equilibradas, paréntesis equilibrados, llamadas de función anidadas, precedencia aritmética, todos requieren una gramática libre de contexto, no una regular. Use un combinador de analizadores (Parsimmon, nom) o un generador (pegjs, antlr). La regex puede coincidir con tokens de apertura o cierre pero no puede rastrear equilibrio.
Cuando una operación de cadena simple es suficiente
Si necesita verificar si una cadena empieza con prefix-, use str.startsWith("prefix-"), no /^prefix-/. Los métodos de cadena son más rápidos, más claros, e imposibles de equivocarse con cuantificadores. Reserve regex para patrones que los métodos de cadena no puedan expresar.
Validación de esquema complejo
Validar que un documento JSON tiene una forma específica (campos requeridos, tipos anidados, rangos de valores) se hace mucho mejor con un validador de JSON Schema (ajv, zod, joi) que con una regex. La regex puede verificar formato pero no estructura, y una regex que intenta validar un documento JSON es una pesadilla de mantenimiento.
Más preguntas
¿Cuándo debería usar lookahead vs lookbehind?
Lookahead (?=...) afirma que lo que sigue coincide sin consumirlo; lookbehind (?<=...) hace lo mismo para lo que precede. Use lookahead cuando el contexto final determine si coincidir, lookbehind cuando el contexto inicial lo haga. JavaScript soporta ambos desde 2018 (ES2018), y todos los navegadores modernos lo hacen. Las versiones de Safari más antiguas que 16.4 carecían de soporte de lookbehind.
¿Lookbehind es soportado en todos los navegadores?
Lookbehind (positivo y negativo) es soportado en Chrome desde la versión 62 (2017), Firefox desde 78 (2020), Edge desde 79 (2020), y Safari desde 16.4 (2023). Si su audiencia puede usar Safari más antiguo, evite lookbehind o haga polyfill con un patrón alternativo. Para Node.js, lookbehind ha sido soportado desde 10.0.
¿Qué hace la bandera Unicode (u)?
La bandera u habilita el modo Unicode: los pares sustitutos son tratados como un solo carácter, los escapes \u{...} funcionan, y los escapes de propiedad \p{...} se vuelven disponibles. Sin u, un emoji como la cara sonriente cuenta como dos unidades de código y . coincide solo con la primera mitad. Siempre establezca u cuando trabaje con texto más allá de ASCII.
¿Qué tan rápido es el motor de regex?
El motor RegExp de V8 usa una implementación Irregexp que compila a código nativo. Para patrones simples coincide millones de caracteres por segundo. Los patrones patológicos (cuantificadores anidados en entrada adversarial) pueden explotar a tiempo exponencial, que es por qué ReDoS es un vector de ataque real. Los motores modernos aplican heurísticas para detectar y abortar coincidencias descontroladas, pero aún debería evitar patrones riesgosos.
¿Cómo difieren las regex de JavaScript y Python?
Los grupos nombrados usan sintaxis diferente (?
¿Puedo usar IA para generar regex en su lugar?
Los LLM son buenos proponiendo patrones de regex iniciales pero rutinariamente producen salida sutilmente incorrecta (codicioso donde se necesitaba perezoso, escapes faltantes, banderas incorrectas). Use IA para borradores iniciales, luego valide ejecutando la regex contra muestras reales en este probador. Itere hasta que los resaltados coincidan exactamente con lo que espera. El bucle de retroalimentación interactiva captura los errores de LLM antes de que lleguen a producción.
Herramientas relacionadas
Formateador y validador JSON gratuito en línea
Formatea, minifica y valida JSON al instante. Pega tu JSON y obtén una salida formateada con mensajes de error.
Codificador y decodificador Base64 gratuito en línea
Codifica texto a Base64 o decodifica Base64 a texto al instante. Admite la conversión de archivo a Base64. Gratis, sin registro, funciona en tu navegador.
Convertidor de mayúsculas y minúsculas
Convierte texto entre MAYÚSCULAS, minúsculas, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, etc.