Probador de Regex
Crea y prueba expresiones regulares sobre tu propio texto en tiempo real. Visualiza cada coincidencia resaltada, inspecciona los grupos de captura y previsualiza los reemplazos, todo en tu navegador.
/
/g
Flags
Consejo: activa el flag g para reemplazar todas las coincidencias en lugar de solo la primera.
Cómo usar Probador de Regex
- 1
Escribe tu patrón
Escribe una expresión regular en el campo de patrón y luego activa o desactiva los flags (g, i, m y más) para controlar con exactitud cómo funciona la coincidencia.
- 2
Añade tu texto de prueba
Pega el texto en el que quieres buscar en el campo «Cadena de prueba». Las coincidencias se resaltan al instante a medida que escribes o editas el patrón.
- 3
Inspecciona las coincidencias
Revisa cada coincidencia, su posición en el texto y los grupos de captura o con nombre en la lista de resultados para confirmar que el patrón se comporta como esperas.
- 4
Reemplaza o copia
Introduce un reemplazo para previsualizar las sustituciones con retrorreferencias del tipo $1 y luego copia el resultado directamente en tu código o documento.
Las expresiones regulares en la práctica: guía de campo para desarrolladores
Qué describe realmente una regex
Una expresión regular es un pequeño lenguaje de patrones para describir conjuntos de cadenas. En lugar de preguntar si un texto es igual a un valor fijo, describes su forma —una secuencia de dígitos, una palabra seguida de una arroba y un dominio, tres letras y luego un guion— y el motor recorre tu texto en busca de cada subcadena que encaje. Esa única idea impulsa la validación, la búsqueda y reemplazo, el análisis de registros, la tokenización y la extracción de datos en casi todos los lenguajes y editores.
Este probador usa el motor de JavaScript (ECMAScript) integrado en tu navegador, el mismo que utilizan Node.js y las aplicaciones web. Así, un patrón que coincide aquí se comporta de forma idéntica en el código de tu aplicación, lo que lo convierte en un entorno de pruebas fiel para crear y depurar un patrón antes de pegarlo en un proyecto.
Clases de caracteres y los bloques de construcción
La mayor parte de un patrón son simplemente caracteres literales que coinciden consigo mismos, intercalados con un puñado de tokens especiales. Una clase de caracteres entre corchetes coincide con un solo carácter de un conjunto: un rango de letras minúsculas, un conjunto de vocales o un dígito. La abreviatura barra invertida-d coincide con un dígito, barra invertida-w coincide con un carácter de palabra (letras, dígitos, guion bajo), barra invertida-s coincide con un espacio en blanco y el punto coincide con cualquier carácter salvo un salto de línea. Pon la abreviatura en mayúscula para invertirla: barra invertida-D es cualquier carácter que no sea un dígito.
Estos son los átomos que combinas para formar todo lo demás. Un patrón para un color hexadecimal, por ejemplo, es un ancla para el signo de almohadilla seguida de una clase de caracteres de dígitos hexadecimales repetida; un patrón para una palabra es, sencillamente, barra invertida-w repetida una o más veces. Construye los patrones a partir de estas piezas pequeñas en lugar de recurrir a una única expresión gigantesca.
Anclas, cuantificadores y alternancia
Las anclas coinciden con posiciones en lugar de con caracteres. El acento circunflejo coincide con el inicio de la cadena (o con el inicio de una línea con el flag de multilínea) y el signo de dólar coincide con el final; el token de límite de palabra barra invertida-b coincide con el borde entre un carácter de palabra y un carácter que no lo es, que es la forma de hacer coincidir una palabra entera sin atraparla dentro de otra más larga. Los cuantificadores controlan la repetición: el signo más significa una o más veces, el asterisco significa cero o más veces y el signo de interrogación significa opcional. También puedes especificar un número exacto o un rango usando la forma con llaves cuando necesites, por ejemplo, un valor que se repita de dos a cuatro veces.
La alternancia con el símbolo de barra vertical significa «o»: un patrón de cat o dog coincide con cualquiera de las dos palabras. Envuelve las alternativas entre paréntesis para acotar la elección. Por defecto, los cuantificadores son voraces y atrapan todo lo que pueden; añade un signo de interrogación después de un cuantificador para hacerlo perezoso y que coincida con lo menos posible, que es la solución habitual cuando un patrón pensado para capturar una etiqueta se traga todo hasta la última de la línea.
Grupos de captura y cómo usarlos
Los paréntesis cumplen una doble función: agrupan parte de un patrón y capturan aquello con lo que esa parte coincidió. Tras una coincidencia, las piezas capturadas quedan disponibles como grupos numerados —el primer par de paréntesis es el grupo uno, el siguiente es el grupo dos— y la lista de resultados de aquí muestra cada uno para que confirmes que estás extrayendo exactamente el fragmento que pretendes. Un patrón para una cadena con forma de correo electrónico, con paréntesis distintos alrededor de la parte local, el dominio y la extensión, te permite leer esas tres piezas por separado.
Los grupos con nombre, escritos con la sintaxis que coloca un nombre entre corchetes angulares justo después del paréntesis de apertura, dan a esas capturas etiquetas legibles en lugar de meros números y aparecen en su propia sección. Cuando solo quieres agrupar sin la carga de la captura, un grupo sin captura —un paréntesis de apertura seguido de un signo de interrogación y dos puntos— mantiene limpia la numeración de tus grupos. Esas capturas son también lo que referencia tu paso de reemplazo.
Los flags cambian toda la coincidencia
Los flags son modificadores que alteran la forma en que se aplica todo el patrón. Global encuentra todas las coincidencias en lugar de detenerse en la primera, lo que resulta esencial para reemplazar todas las apariciones y no solo una. Ignorar mayúsculas y minúsculas hace que las letras coincidan sin importar su capitalización. Multilínea redefine las anclas de acento circunflejo y de dólar para que coincidan en cada salto de línea en vez de solo al principio y al final de la entrada.
Los flags restantes son situacionales, pero importantes. Dotall permite que el punto coincida también con los caracteres de salto de línea, de modo que un patrón pueda abarcar varias líneas. Unicode activa el tratamiento completo de Unicode para los puntos de código que están más allá del rango básico y para los escapes de propiedad Unicode. Sticky ancla cada coincidencia a la posición justo después de la anterior, que es la forma en que los tokenizadores avanzan por la entrada sin saltarse nada. Activa y desactiva los flags aquí y observa cómo cambian las coincidencias resaltadas para desarrollar intuición sobre cada uno.
Patrones que escribirás constantemente
Unas cuantas formas aparecen una y otra vez. Sacar todos los enteros de un bloque de texto es barra invertida-d repetida una o más veces con el flag global. Una comprobación aproximada de correo electrónico es uno o más caracteres de palabra, una arroba, uno o más caracteres de palabra, un punto literal y una breve serie de letras: suficiente para un filtro rápido de cordura, aunque deliberadamente laxo. Recortar o colapsar series de espacios en blanco, validar un slug de letras minúsculas y guiones, y extraer el contenido entre dos marcadores son todas tareas del día a día.
Resiste la tentación de validar formatos verdaderamente complejos con un único patrón monstruoso. Las gramáticas de correo electrónico y de URL, en particular, son tristemente célebres por lo difícil que es capturarlas por completo en una regex; para esos casos, un patrón laxo más un analizador de verdad o una biblioteca específica suele ser mejor que una expresión ilegible que te dará miedo tocar dentro de seis meses.
Retroceso catastrófico y cómo evitarlo
El retroceso del motor es lo que hace potente a una regex, pero también puede hacer que un patrón explote. Cuando dos partes cuantificadas de un patrón pueden coincidir con los mismos caracteres de muchas maneras superpuestas —un ejemplo clásico es un grupo que a su vez se repite, donde la repetición interna y la externa compiten—, el motor puede llegar a probar un número astronómico de combinaciones contra una cadena que, al final, no coincide. En una entrada larga esto puede bloquearse durante segundos o colgarse por completo, y en un servidor se convierte en un vector de denegación de servicio conocido como ReDoS.
Las defensas son estructurales. Evita anidar un cuantificador dentro de otro que pueda coincidir con lo mismo, prefiere clases de caracteres más específicas a un punto permisivo para que cada paso tenga una sola forma de consumir la entrada, y ancla el patrón cuando puedas. Si tienes que probar un patrón arriesgado, hazlo aquí primero contra una cadena realista del peor caso posible, donde un patrón desbocado te cuesta una pestaña del navegador en lugar de una caída en producción.
Cómo previsualizar los reemplazos con seguridad
La búsqueda y reemplazo es donde una regex demuestra su valor a diario, y el campo de reemplazo te permite previsualizar el resultado antes de aplicarlo en ningún sitio. Referencia tus grupos de captura en el reemplazo con un signo de dólar y el número de grupo —dólar-uno inserta aquello con lo que coincidió el primer grupo—, de modo que puedas reordenar una fecha, dar nuevo formato a un nombre o envolver las coincidencias en marcado. Recuerda que, sin el flag global, solo se reemplaza la primera coincidencia; activa global para transformar todas las apariciones.
Todo se ejecuta localmente en tu navegador usando el motor nativo, así que nada de lo que pegues —líneas de registro, código fuente, datos de clientes— se sube, se registra ni se almacena. Eso convierte al probador en un lugar seguro para iterar sobre una muestra del mundo real hasta que tanto las coincidencias como el resultado del reemplazo sean exactamente correctos, y luego copiar el patrón terminado en tu código con confianza.
Preguntas frecuentes
¿Qué es una expresión regular?
¿Qué variante de regex usa este probador?
¿Qué significan los flags?
¿Cómo funcionan los grupos de captura?
¿Se envían mis datos a un servidor?
Herramientas relacionadas
Sigue trabajando con estas prácticas herramientas