KeroTools

Probar y Depurar Expresiones Regulares

Prueba un patrón regex y mira las coincidencias, grupos y flags en vivo mientras lo escribes.

//g
2 coincidencias
coincidencias
Contact us at hello@kerotools.com or support@example.org.

Patrón y muestra se quedan en tu equipo

Nada que borrar después

Seguro para muestras reales de producción

Funciona en todo navegador moderno

Cómo funciona

  1. 1

    Escribe tu patrón

    Ponlo en el campo y activa las banderas que piensas usar en producción.

  2. 2

    Pega texto representativo

    Incluye los casos incómodos y las cadenas que no deberían coincidir en absoluto.

  3. 3

    Lee coincidencias y grupos

    Comprueba lo encontrado y lo omitido antes de llevarte el patrón a ninguna parte.

Por qué usar esta herramienta

Cada coincidencia resaltada en vivo

Ve lo que el patrón captura de verdad mientras lo escribes, en vez de deducirlo de la sintaxis.

Grupos de captura desglosados

Grupos numerados y con nombre listados por coincidencia, que es donde la mayoría de patrones falla.

Banderas visibles

Global, sin distinguir mayúsculas, multilínea y dotall mostradas explícitamente y no enterradas en un delimitador.

Prueba también lo que no debe coincidir

Pega las cadenas que deben rechazarse junto a las que deben coincidir: esa es la mitad que la gente se salta.

No se sube nada

El patrón y el texto de muestra se quedan en tu navegador, y líneas de log reales nunca llegan a un servidor.

Gratis y sin cuenta

Sin registro, sin marca de agua y sin límite de cuánto pruebes.

Un patrón que coincide con tus ejemplos no es un patrón que funcione

Casi todo el mundo prueba igual: escribe la expresión, pega tres cadenas que se supone que debe capturar, las ve resaltadas y la publica. Eso confirma que el patrón no está completamente roto y no te dice nada del fallo que de verdad va a morder. La pregunta interesante no es qué coincide, sino qué coincide además: la entrada en la que nunca pensaste y que se cuela, y la entrada válida que rechaza en silencio. Un patrón para un teléfono que funciona con cuatro ejemplos se encontrará con un prefijo internacional, una extensión o un espacio en un sitio inesperado. Así que la disciplina que conviene adoptar es pegar a propósito las cadenas que deben rechazarse, junto a las que deben capturarse, y revisar ambas listas cada vez que el patrón cambie.

Algunos patrones pueden colgar el proceso que los ejecuta

Este es el fallo que convierte una expresión regular en una caída de servicio, y conviene conocerlo porque es invisible hasta que ocurre. La mayoría de motores buscan mediante retroceso: cuando una rama falla, retroceden y prueban otra. Con cuantificadores anidados —un grupo repetido que a su vez se repite, de la forma `(a+)+`— el número de combinaciones que probar crece exponencialmente con la longitud de la entrada. Sobre una cadena que coincide termina al instante; sobre una que *casi* coincide y falla al final, puede tardar más de lo que lleva existiendo el universo. Eso es un vector de denegación de servicio cuando el patrón se aplica a la entrada de un usuario, y ha tumbado servicios grandes: tanto Cloudflare como Stack Overflow publicaron análisis post mortem atribuyendo una caída global exactamente a esto. Si tu patrón tiene un cuantificador dentro de un grupo cuantificado, pruébalo con una cadena larga que no coincida antes de acercarlo a producción.

No existe un único lenguaje de expresiones regulares

La sintaxis parece portable y no lo es. JavaScript, PCRE tal como la usan PHP y Perl, Python, Java, .NET y las herramientas POSIX implementan cada uno un dialecto distinto, y los patrones viajan entre ellos con cambios silenciosos de significado. La búsqueda hacia atrás es una trampa habitual: lleva décadas en PCRE y solo llegó a JavaScript hace poco, así que un patrón que funciona en tu editor puede fallar en un navegador. Go y varios otros sistemas usan RE2, que es un diseño distinto por completo: garantiza tiempo lineal, así que el retroceso catastrófico anterior es imposible, pero lo consigue eliminando las retrorreferencias y toda la búsqueda alrededor. La sintaxis de grupos con nombre, los escapes de propiedades Unicode e incluso lo que incluye `\d` varían. Prueba en el dialecto en el que vas a desplegar, porque si no el resultado es pasar aquí y fallar allí.

Codicioso por defecto, y el punto es más estrecho de lo que crees

Dos valores por defecto explican buena parte de los patrones que se comportan de forma rara. Los cuantificadores son codiciosos: `.*` toma todo lo que puede y solo devuelve lo imprescindible, así que `<.*>` sobre `<a><b>` coincide con la cadena entera y no con la primera etiqueta. Añadir un signo de interrogación lo vuelve perezoso —`<.*?>`— y hace coincidir cada etiqueta por separado, que es casi siempre lo que se pretendía. El segundo valor por defecto es que el punto no coincide con un salto de línea. Eso es invisible en ejemplos de una línea y se convierte en misterio en cuanto el patrón se topa con un documento de varias y se detiene en el primer salto; la bandera dotall lo arregla. Conviene distinguir un par relacionado: la bandera multilínea cambia lo que significan `^` y `$`, anclándolos a cada línea en vez de a toda la cadena, y no hace nada al punto.

Para qué no usar una expresión regular

El consejo de no analizar HTML con una regex suele contarse como broma, y la razón de fondo es precisa: el HTML anida a profundidad arbitraria, emparejar una etiqueta de apertura con su cierre exige contar, y una expresión regular no tiene memoria para contar. No es cuestión de escribir un patrón mejor: la clase de lenguaje es la equivocada. Las direcciones de correo fallan de otro modo. La gramática de la RFC 5322 permite cadenas entrecomilladas, comentarios y caracteres que nadie espera, así que un patrón realmente conforme llega a miles de caracteres y aun así no puede decirte lo único que importa, que es si la dirección recibe correo. La regla práctica para ambos: usa un analizador de verdad para marcado estructurado y, para una dirección, comprueba que hay una `@` con algo a cada lado y envía un mensaje de confirmación.

Por qué probar en local importa con este tipo de texto

El patrón en sí rara vez es sensible. Lo que pegas para probarlo normalmente sí lo es, porque una expresión regular solo merece probarse contra entrada realista: líneas de log reales con direcciones reales dentro, una exportación de registros de clientes que intentas limpiar, una muestra de datos de producción que copiaste precisamente porque los ejemplos inventados no capturaban el problema. Ese es el material que hace significativa la prueba y el material que no elegirías entregar a un tercero. Esta herramienta ejecuta la coincidencia en la página y no transmite ni el patrón ni la muestra, y puedes comprobarlo en la pestaña Red de las herramientas de desarrollo.

Errores comunes que conviene evitar

  • Probar solo cadenas que deberían coincidir. El fallo que muerde es la entrada en la que nunca pensaste colándose: pega también las que deben rechazarse cada vez que cambies el patrón.
  • Anidar un cuantificador dentro de un grupo cuantificado. Formas como `(a+)+` retroceden exponencialmente con una entrada casi coincidente, un vector de denegación de servicio con caídas globales documentadas.
  • Suponer que el patrón es portable. La búsqueda hacia atrás, los grupos con nombre y los escapes Unicode difieren entre JavaScript, PCRE, Python y RE2: prueba en el dialecto de despliegue.
  • Olvidar que `.` no coincide con un salto de línea. Un patrón que va bien en una línea se detiene en el primer salto de un documento; lo que quieres es dotall, no multilínea.
  • Analizar HTML o validar correo con una regex. El anidamiento necesita un contador que una regex no tiene, y un patrón de correo conforme sigue sin decirte si la dirección recibe mensajes.

Comparativa

AspectoEsta herramientaProbadores onlineEl panel de búsqueda de un editor
Contenido enviado a un servidorNuncaNormalmente síNo
Grupos de captura desglosadosNormalmenteRara vez
Banderas mostradas explícitamenteNormalmenteEn parte
Funciona sin abrir un proyectoNo
Cuenta o registroNo hace faltaA veces exigidoNo hace falta
PrecioGratisGratis / planes de pagoGratis / de pago

Características

Resaltado en vivo

Coincidencias marcadas en el texto de muestra a medida que cambia el patrón, con detalle al pasar el cursor.

Grupos con nombre y numerados

Cada captura listada por coincidencia, para ver qué grupo contiene qué.

Todas las banderas habituales

Global, ignorar mayúsculas, multilínea, dotall, unicode y sticky, cada una conmutable por separado.

Número y posiciones de coincidencias

Cuántos aciertos y dónde empiezan, lo que importa al reemplazar y no solo al buscar.

Errores de sintaxis explicados

Un corchete sin cerrar o un escape mal puesto dice qué falla en vez de no coincidir en silencio.

Aguanta entradas largas

Archivos de log enteros se pueden pegar como sujeto de prueba sin subida.

Nada que instalar

Sin editor, sin entorno de ejecución, sin dependencias: funciona en la página web.

Listo para árabe y RTL

Interfaz completa en ocho idiomas, incluido el árabe de derecha a izquierda.

Seguro por defecto

Servido por HTTPS, sin rastreo de contenido ni subida a terceros.

Quién la usa

Desarrolladores

Afinar un patrón contra datos de muestra reales antes de meterlo en el código.

Analistas de datos

Construir un patrón de extracción para una columna sucia y ver exactamente qué se le escapa.

Administradores de sistemas

Comprobar una expresión de filtrado de logs contra líneas reales y no inventadas.

Quien está aprendiendo expresiones regulares

Ver qué hace un patrón según lo cambias, que es más rápido que leer sobre ello.

Preguntas Frecuentes

No. Todo se ejecuta localmente en tu navegador — tu texto nunca se sube, guarda ni comparte.

Sí — totalmente gratis, sin cuenta y sin límites.