Probador de expresiones regulares (regex)
Escribe una expresión regular y un texto de prueba: verás las coincidencias resaltadas, los grupos de captura de cada una y el resultado de un reemplazo, todo en vivo con el motor de JavaScript.
Cómo usar el probador
- Escribe el patrón sin las barras delimitadoras. Si hay un error de sintaxis, lo verás al instante con el mensaje del motor.
- Marca las flags que necesites. Por defecto están g (todas las coincidencias) e i (ignora mayúsculas).
- Pega tu texto. Las coincidencias se resaltan y debajo aparece una tabla con la posición y los grupos de cada una, incluidos los grupos con nombre
(?<nombre>…). - Usa el campo Reemplazar por para probar sustituciones con
$1,$<nombre>o$&(coincidencia completa).
El ejemplo cargado extrae usuario y dominio de los correos; fíjate en que pepe@localhost no coincide porque el patrón exige un punto en el dominio. Para extraer direcciones de un texto largo sin escribir regex, tienes el extractor de emails y el de URL. El texto no sale de tu navegador.
Chuleta de sintaxis
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| . | Cualquier carácter salvo salto de línea (con s, también este) | a.c → abc, a-c |
| \d \w \s | Dígito, carácter de palabra [A-Za-z0-9_], espacio en blanco | \d{4} → 2026 |
| \D \W \S | Lo contrario de los anteriores | \S+ → palabra |
| [abc] [^abc] [a-z] | Uno de la lista, ninguno de la lista, rango | [aeiouáéíóú] |
| ^ $ | Inicio y fin del texto (de cada línea con m) | ^\d+$ |
| \b | Límite de palabra | \bsol\b no encaja en «soldado» |
| * + ? | 0 o más, 1 o más, 0 o 1 | colou?r |
| {n} {n,} {n,m} | Exactamente n, al menos n, entre n y m | \d{2,4} |
| *? +? ?? | Versiones perezosas (lo mínimo posible) | <.+?> |
| (…) | Grupo de captura ($1, $2…) | (\d+)-(\d+) |
| (?<n>…) | Grupo con nombre ($<n>) | (?<año>\d{4}) |
| (?:…) | Grupo sin captura | (?:https?|ftp):// |
| a|b | Alternativa | gato|perro |
| (?=…) (?!…) | Lookahead positivo y negativo | \d+(?= €) |
| (?<=…) (?<!…) | Lookbehind positivo y negativo | (?<=\$)\d+ |
| \1 \k<n> | Referencia a un grupo anterior | (\w)\1 → «ll», «rr» |
| \p{L} | Cualquier letra Unicode (requiere u) | \p{L}+ incluye ñ y tildes |
Patrones útiles
| Para | Patrón |
|---|---|
| Fecha dd/mm/aaaa | \b(0?[1-9]|[12]\d|3[01])/(0?[1-9]|1[0-2])/(\d{4})\b |
| Hora 24 h | \b([01]\d|2[0-3]):[0-5]\d\b |
| Código postal España (5 dígitos) | \b(0[1-9]|[1-4]\d|5[0-2])\d{3}\b |
| Número decimal con coma o punto | -?\d+(?:[.,]\d+)? |
| Espacios duplicados | {2,} |
| Color hexadecimal | #(?:[0-9a-f]{3}){1,2}\b |
| Palabras con tildes y ñ | [\p{L}]+ (con flag u) |
Una regex comprueba el formato, no la validez: 31/02/2026 pasa el patrón de fecha aunque no exista. Para documentos con dígito de control (DNI, IBAN, CURP…) usa los validadores específicos, como el de IBAN.
Diferencias entre lenguajes
- Escapes en cadenas: en el código fuente,
\dse escribe"\\d"en Java, C# (sin @) o ennew RegExp("…")de JavaScript. Si necesitas convertir un patrón a cadena literal, usa escapar cadenas. - Python usa
(?P<nombre>…)para grupos con nombre y\g<nombre>en el reemplazo; JavaScript usa(?<nombre>…)y$<nombre>. - PHP (PCRE) admite modificadores en línea como
(?i)y grupos atómicos, que JavaScript no tiene. - Bases de datos: MySQL 8 y PostgreSQL tienen
REGEXP/~con dialectos propios; prueba allí los patrones avanzados.
Si solo necesitas sustituir un texto fijo en muchas líneas, la herramienta de buscar y reemplazar es más directa.
Preguntas frecuentes
¿Qué motor de expresiones regulares usa?
El de JavaScript (ECMAScript) de tu navegador. Es muy parecido a PCRE (PHP) y al de Python, pero hay diferencias: por ejemplo, no admite modificadores en línea como (?i) ni grupos atómicos.
¿Por qué mi regex solo encuentra la primera coincidencia?
Porque falta la flag g (global). Sin ella, JavaScript se detiene en la primera coincidencia y el reemplazo solo cambia la primera aparición.
¿Cómo busco un punto o un paréntesis literal?
Escápalo con barra invertida: \., \(, \?. Los caracteres especiales son . ^ $ * + ? ( ) [ ] { } | \ y /.
¿Cómo hago que ^ y $ funcionen en cada línea?
Activa la flag m (multilínea). Sin ella, ^ y $ solo coinciden con el principio y el final de todo el texto.
¿Por qué la página se queda colgada con algunas expresiones?
Patrones como (a+)+$ provocan «backtracking catastrófico»: el tiempo crece exponencialmente con la longitud del texto. Evita cuantificadores anidados sobre lo mismo.