Evaluador de expresiones regulares
Las expresiones regulares (regex) son patrones para coincidir con texto. Esta herramienta analiza la sintaxis regex, explica los componentes del patrón y proporciona un área de prueba para probar coincidencias contra texto de muestra. Soporta formatos de regex de JavaScript, PCRE y Python.
Especificaciones
Casos de uso comunes
- Depurar por qué una regex no coincide con el texto esperado
- Aprender sintaxis regex viendo explicaciones
- Probar patrones antes de agregarlos al código
- Validar patrones de entrada para campos de formulario
- Extraer datos de texto estructurado (registros, CSV, HTML)
Funcionalidades
- Detectar formato regex (JavaScript /patrón/banderas, PCRE #patrón#, Python r"patrón")
- Explicar componentes del patrón en español sencillo
- Probar contra texto de muestra con resaltado de coincidencias
- Modo de coincidencia única o encontrar todas las coincidencias
- Mostrar grupos de captura y su contenido
- Visualización de grupos de captura con nombre
- Mostrar posiciones e índices de coincidencias
- Visualización del tiempo de ejecución de regex
- Indicadores de características del patrón (anclas, cuantificadores, etc.)
- Advertencias del patrón
- Biblioteca de patrones comunes (correo electrónico, URL, teléfono, etc.)
Ejemplos
Patrón de correo electrónico
Pruébalo →Una regex para coincidir con direcciones de correo electrónico.
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/iPatrón de fecha
Pruébalo →Una regex para fechas AAAA-MM-DD con grupos de captura.
/(\d{4})-(\d{2})-(\d{2})/Consejos
- Use evaluadores en línea para depurar patrones complejos antes de producción.
- Escape los caracteres especiales (. ^ $ * + ? { } [ ] \ | ( )) con barra invertida.
- Los grupos de captura con nombre (?<nombre>...) hacen las coincidencias más legibles.
- La bandera g encuentra todas las coincidencias; sin ella, solo se devuelve la primera coincidencia.
- Tenga cuidado con los cuantificadores codiciosos (* +); use no codiciosos (*? +?) cuando sea apropiado.
Comprender Evaluador de expresiones regulares
Las expresiones regulares (regex) son un lenguaje de coincidencia de patrones utilizado en prácticamente todos los lenguajes de programación, editores de texto y herramientas de línea de comandos. Una regex define un patrón de búsqueda usando una combinación de caracteres literales y metacaracteres que coinciden con clases de cadenas. Son esenciales para la validación de entrada, extracción de texto, operaciones de buscar y reemplazar, y análisis de registros.
La sintaxis base incluye clases de caracteres ([a-z], \\d, \\w, \\s), cuantificadores (*, +, ?, {n,m}), anclas (^, $, \\b), alternancia (|) y agrupación con paréntesis. Los grupos capturados extraen subcadenas coincidentes y permiten referencias hacia atrás. Las búsquedas anticipadas (?=...) y retrospectivas (?<=...) coinciden con posiciones sin consumir caracteres, permitiendo aserciones complejas sobre el contexto circundante.
La regex de JavaScript tiene su propia variante con banderas específicas: g (global), i (sin distinción de mayúsculas), m (multilínea), s (dotAll), u (Unicode) e y (sticky). La bandera u es cada vez más importante para manejar correctamente texto Unicode, ya que sin ella, los patrones pueden no coincidir correctamente con caracteres multi-byte. Los grupos de captura con nombre (?<nombre>...) mejoran la legibilidad sobre los grupos numerados.
Las tareas comunes de regex incluyen validación de correo electrónico, análisis de URL, extracción de datos de texto estructurado (archivos de registro, CSV) y reemplazo de patrones en refactorización de código. Sin embargo, regex tiene límites — no puede analizar estructuras anidadas como HTML o JSON (use un analizador apropiado), y los patrones excesivamente complejos se vuelven ilegibles e imposibles de mantener. El chiste "ahora tiene dos problemas" refleja desafíos reales de mantenimiento con regex complejas.
HTML es un lenguaje libre de contexto con estructuras anidadas que las expresiones regulares fundamentalmente no pueden manejar. Una regex no puede coincidir correctamente con etiquetas de apertura y cierre con profundidad de anidamiento arbitraria. Los casos simples pueden parecer funcionar pero fallan en casos límite con etiquetas anidadas, atributos que contienen >, o comentarios. Para el procesamiento de HTML, use un analizador DOM como DOMParser en el navegador, cheerio para Node.js o BeautifulSoup para Python.
La diferencia entre .* (codicioso) y .*? (perezoso) es significativa para el comportamiento de coincidencia. El codicioso .* coincide con tantos caracteres como sea posible, luego retrocede si es necesario. El perezoso .*? coincide con el menor número de caracteres posible. En una cadena como "<b>uno</b><b>dos</b>", el patrón codicioso <b>.*</b> coincide con toda la cadena, mientras que el patrón perezoso <b>.*?</b> coincide solo con el primer "<b>uno</b>". Elegir el modo incorrecto es una de las fuentes más comunes de comportamiento inesperado en regex.
En JavaScript, la bandera u (/patrón/u) habilita la coincidencia con reconocimiento de Unicode. Sin ella, el metacarácter . no coincide con caracteres fuera del Plano Multilingüe Básico (como emoji), y \\w solo coincide con caracteres de palabra ASCII. La bandera u hace que los cuantificadores y las clases de caracteres manejen correctamente los pares sustitutos y habilita escapes de propiedades Unicode como \\p{Letter}. Las búsquedas anticipadas (?=...) y retrospectivas (?<=...) son aserciones de ancho cero que verifican patrones en una posición sin incluirlos en la coincidencia. La búsqueda anticipada positiva (?=...) aserta lo que debe seguir, mientras que la búsqueda anticipada negativa (?!...) aserta lo que no debe seguir. Por ejemplo, \\d+(?= dólares) coincide con números seguidos de " dólares" pero captura solo el número. Las búsquedas retrospectivas funcionan de la misma manera pero verifican el texto precedente.