Probador de expresiones regulares
Introduce un patrón de expresión regular y una cadena de prueba para resaltar las coincidencias y listar los valores de los grupos de captura. Compatible con los indicadores g/i/m/s/u usando el RegExp nativo de JavaScript.
Patrones de expresiones regulares habituales
| Uso | Patrón | Descripción |
|---|---|---|
| Dirección de correo electrónico | ^[\w.+-]+@[\w-]+\.[\w.-]+$ | Coincide con un formato simplificado de correo electrónico compuesto por un nombre de usuario y un dominio separados por @ (no es totalmente conforme a RFC). |
| Teléfono en España | ^[679]\d{8}$ | Coincide con números de teléfono móvil o fijo de España de 9 dígitos que empiezan por 6, 7 o 9. |
| URL | https?:\/\/[\w.-]+(?:\/[\w\-./?%&=]*)? | Extrae cadenas de URL que empiezan por http:// o https://, incluyendo la ruta y los parámetros de consulta. |
| Código postal | ^\d{5}$ | Coincide con un código postal de 5 dígitos, como el usado en España. |
| Código de color hexadecimal | ^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$ | Coincide con colores hexadecimales de CSS en formato completo #RRGGBB o abreviado #RGB. |
| Solo dígitos | ^[0-9]+$ | Comprueba si toda la cadena está formada únicamente por dígitos (0-9). |
Consejos
- El
/indicadoresque aparece junto al campo del patrón te permite ver de un vistazo qué combinación de indicadores está activa en cada momento. - Solo cuentan como grupos de captura las partes entre
(). Usa un grupo no capturante(?:...)si solo necesitas agrupar una condición sin que aparezca en la lista de grupos. - Sin el indicador g solo se encuentra la primera coincidencia. Actívalo si quieres contar todas las apariciones en el texto.
- El botón "Insertar ejemplo" carga un caso de extracción de correos electrónicos, un buen punto de partida para entender cómo funcionan los grupos de captura.
- Todo el procesamiento ocurre dentro de tu navegador: el patrón y la cadena de prueba que escribes nunca se envían a ningún servidor.
Preguntas frecuentes
[abc], \d, +, *, etc.) es en gran medida compartida, pero la sintaxis de los grupos con nombre, el soporte de lookahead/lookbehind y los indicadores disponibles varían sutilmente entre lenguajes. Esta herramienta sigue la especificación RegExp de JavaScript, por lo que no garantiza un comportamiento idéntico en otros lenguajes.*, +, ?) sin nada delante o una clase de caracteres no válida. El mensaje de error suele dar una pista, así que revisa el equilibrio de paréntesis y el escape de caracteres especiales (como \. o \().
A propósito — Qué ocurre dentro de un motor de expresiones regulares
Las expresiones regulares se remontan a la teoría de los "lenguajes regulares" propuesta por el matemático Stephen Kleene en la década de 1950. Herramientas tempranas de Unix como el editor de texto ed y el comando grep (abreviatura de "globally search a Regular Expression and Print") adoptaron esta teoría como implementación práctica, lo que explica su rápida difusión en las herramientas de procesamiento de texto. El propio nombre "grep" proviene de una operación de expresión regular, lo cual resulta bastante simbólico.
El motor RegExp de JavaScript realiza el emparejamiento internamente mediante una estrategia de "retroceso" (backtracking): prueba cada elemento del patrón en orden y, si una parte posterior falla, retrocede e intenta otra alternativa. Esta flexibilidad tiene una contrapartida: patrones como (a+)+b combinados con una cadena larga que no coincide pueden hacer que el número de intentos crezca exponencialmente, un fenómeno conocido como "retroceso catastrófico" que puede bloquear un navegador o un servidor. Prueba siempre los patrones complejos con entradas variadas antes de llevarlos a producción.
Un objeto de expresión regular con el indicador global (g) mantiene internamente un cursor llamado lastIndex, y cada llamada a exec() reanuda la búsqueda desde esa posición. Reutilizar el mismo objeto de expresión regular en búsquedas no relacionadas puede dejar este cursor en un estado inesperado, por lo que esta herramienta crea una instancia nueva de RegExp cada vez para evitar arrastrar ese estado residual.
Los grupos de captura con nombre ((?<nombre>...)) se añadieron en ECMAScript 2018 y son una característica relativamente reciente. Referirse a un grupo por su nombre en lugar de por su número mejora mucho la legibilidad de patrones complejos, algo especialmente útil al analizar fechas, donde importa saber qué representa cada grupo.