Probador de Regex

Escribe una expresión regular, pega un texto de prueba y ve las coincidencias resaltadas en vivo — con grupos de captura, flags y mensajes de error claros.

1.033 visitas

Cómo Funciona

Una expresión regular describe un patrón de caracteres en lugar de una cadena literal, lo que permite que una expresión corta coincida con toda una familia de textos: cualquier dirección de correo, cualquier número de teléfono en varios formatos, cualquier línea de un archivo de registro que empiece con "ERROR". Escribe una expresión regular de JavaScript, activa sus flags (g todas las coincidencias, i insensible a mayúsculas, m anclas multilínea, s el punto coincide con saltos de línea, u Unicode completo) y pega un texto de muestra: cada coincidencia se resalta en su lugar y se lista debajo con su posición y sus grupos de captura. Los paréntesis () crean un grupo de captura — una forma de extraer una parte concreta del texto coincidente, como el dominio de un correo o el año de una fecha, en lugar de solo saber que hubo una coincidencia.

Hay una distinción que confunde a casi todo el mundo al principio: cuantificadores codiciosos frente a perezosos. .* es codicioso — intenta coincidir con la mayor cantidad de texto posible, y solo retrocede si es necesario. Contra la entrada <b>negrita</b> e <i>cursiva</i>, el patrón <.*> coincide codiciosamente desde el primer < hasta el último >, engullendo ambas etiquetas. Añadir un ? para obtener .*? lo hace perezoso — coincide con lo menos posible, así que <.*?> se detiene en el primer > y acierta al coincidir solo con <b>. Esta distinción es precisamente la razón por la que las expresiones regulares ingenuas para HTML fallan con marcado real.

Lo Que Deberías Saber

El motor aquí es la implementación nativa de JavaScript (ECMAScript) de tu propio navegador, así que un patrón que coincide aquí coincide de forma idéntica en tu código JS — no hay ninguna capa de traducción que cuestionar. Los sabores de regex de otros lenguajes — PCRE (PHP), el re de Python, el Pattern de Java — comparten la mayor parte de la sintaxis básica (clases de caracteres, cuantificadores, grupos) pero divergen en funciones avanzadas: soporte de lookbehind, sintaxis de grupos con nombre, cuantificadores posesivos, y algunas secuencias de escape difieren. Vuelve a probar siempre los casos límite en el lenguaje de destino real antes de publicar.

Ten cuidado con el backtracking catastrófico: patrones con cuantificadores anidados o solapados, como (a+)+b probado contra una cadena larga de caracteres "a" sin una "b" final, pueden forzar al motor a un retroceso exponencial y congelar la página — o tu servidor de producción, por la misma razón. Si un patrón se cuelga aquí, acorta primero el texto de prueba y luego reestructura el patrón (a menudo eliminando por completo la repetición anidada) en lugar de simplemente darle más CPU. Todo se ejecuta localmente en tu navegador; ningún patrón ni texto se transmite jamás.

Preguntas Frecuentes

¿Qué variante de regex se usa?

JavaScript (ECMAScript) — el motor nativo del navegador. Los patrones se comportan igual que en tu código JS; PCRE y Python comparten la mayor parte de la sintaxis pero difieren en algunas construcciones avanzadas.

¿Qué significan los flags?

g busca todas las coincidencias en vez de solo la primera; i ignora mayúsculas/minúsculas; m hace que ^ y $ coincidan por línea; s permite que el punto coincida con saltos de línea; u activa el manejo completo de Unicode.

¿Por qué mi patrón congela la página?

Ciertos patrones con cuantificadores anidados (como (a+)+b) pueden generar un backtracking catastrófico con textos largos. Acorta el texto de prueba o reestructura el patrón — el mismo bloqueo ocurriría en tu código en producción.

¿Qué es un grupo de captura y por qué importa?

Los paréntesis alrededor de parte de un patrón crean un grupo de captura, que extrae ese fragmento concreto por separado de la coincidencia completa — por ejemplo (\d{4})-(\d{2})-(\d{2}) aplicado a una fecha da el año, el mes y el día como tres capturas individuales en lugar de solo confirmar que toda la cadena parecía una fecha. Los grupos sin captura, escritos (?:...), agrupan por estructura sin producir una captura adicional.

¿Por qué mi patrón coincidió con más (o menos) texto del esperado?

Casi siempre es una confusión entre codicioso y perezoso. .* y cuantificadores similares toman todo lo posible por defecto; añade un ? (.*?, +?) para hacerlos perezosos y que se detengan en el primer punto posible en lugar del último. Este único carácter suele ser la solución cuando una regex coincide de más a lo largo de varias líneas o etiquetas.

Comentarios

Aún no hay comentarios — ¡sé el primero en escribir uno!

Herramientas Similares