Probador de RegEx, reemplazo y chuleta
Prueba expresiones regulares con coincidencias y grupos de captura resaltados, previsualiza reemplazos y copia el patrón como código para seis lenguajes.
Detalles de las coincidencias y grupos de captura
Chuleta
Haz clic en un patrón para cargarlo con un texto de ejemplo.
Referencia de sintaxis
Caracteres
| . | Cualquier carácter salvo un salto de línea (con s: incluidos los saltos de línea) |
| \d \D | Dígito 0–9 / no dígito |
| \w \W | Carácter de palabra (A–Z, a–z, 0–9, _) / lo contrario |
| \s \S | Espacio en blanco / no espacio en blanco |
| [abc] [^abc] | Uno de a, b, c / cualquiera excepto a, b, c |
| [a-z] | Un carácter del rango a a z |
| \p{L} | Una letra de cualquier idioma (requiere el flag u) |
| \. \\ \( | Escapa un carácter especial para buscarlo literalmente |
Cuantificadores
| * + ? | 0 o más / 1 o más / 0 o 1 |
| {n} {n,} {n,m} | Exactamente n / n o más / entre n y m |
| *? +? {n,m}? | Perezoso: coincide con el menor número posible de caracteres |
Anclas
| ^ $ | Inicio / fin del texto (de cada línea con m) |
| \b \B | Límite de palabra / no límite de palabra |
Grupos y lookaround
| (…) | Grupo de captura, se usa como $1, $2 … |
| (?:…) | Grupo sin captura |
| (?<name>…) | Grupo con nombre, se usa como $<name> |
| \1 \k<name> | Referencia inversa: el mismo texto que capturó un grupo |
| a|b | a o b |
| (?=…) (?!…) | Seguido de / no seguido de |
| (?<=…) (?<!…) | Precedido de / no precedido de |
Reemplazo
| $1 $<name> | Texto de un grupo numerado o con nombre |
| $& $$ | La coincidencia completa / un $ literal |
Cómo se usa
- Introduce el patrón en «Expresión regular» sin las barras que lo delimitan ni los flags, y pega tu texto en «Texto de prueba». Las coincidencias se resaltan en «Coincidencias» y se cuentan mientras escribes. Para empezar con un ejemplo, haz clic en un patrón de la «Chuleta»; esto sustituye el patrón, los flags, el texto de prueba y los ajustes de reemplazo actuales.
- Marca los flags que necesites en «Flags»; pasa el puntero sobre una letra para ver qué hace. Al abrir la página, g y u están activados. Sin g, solo se encuentra la primera coincidencia y solo se reemplaza la primera.
- Consulta «Detalles de las coincidencias y grupos de captura»: cada coincidencia aparece con su posición y el texto de cada grupo como $1, $2, etc., junto con el nombre de los grupos con nombre. Activa el flag d para ver también dónde empieza y termina cada grupo.
- Para probar una sustitución, marca «Reemplazar coincidencias por» y escribe el texto de reemplazo, con $1 o $<name> para los grupos. El texto modificado aparece en «Resultado del reemplazo», y «Copiar resultado» lo copia.
- En «Generador de código», elige JavaScript, Python, Java, PHP, Go o C# y haz clic en «Copiar código». El fragmento incluye el reemplazo cuando «Reemplazar coincidencias por» está marcado. «Copiar como /patrón/flags» copia el patrón como literal de expresión regular de JavaScript.
Preguntas frecuentes
¿Se envía a algún sitio el texto que pruebo?
No. El patrón y el texto de prueba se comparan en tu navegador con su propio motor de expresiones regulares de JavaScript, y no se suben a LeedyBox. La herramienta tampoco los guarda.
¿Por qué mi patrón coincide con más texto del que esperaba?
Un patrón coincide en cualquier lugar donde encaje, así que \d{3} también encuentra 123 dentro de 12345. Añade \b en los dos extremos para buscar palabras o números completos, o usa ^ y $ para exigir que coincida todo el texto (cada línea, con m activado), como hace el patrón de contraseña de la chuleta. \b se basa en los caracteres de palabra de \w (A–Z, a–z, 0–9 y _) y trata letras como é, ñ o 한 como caracteres que no son de palabra, así que \bcafé\b no coincide con café cuando le sigue un espacio. Además, los cuantificadores como + y * son voraces: en <b>x</b>, el patrón <.+> coincide con toda la cadena, mientras que <.+?> o <[^>]+> se detiene en el primer >.
¿Por qué un patrón que funciona en Python, PHP o Java da aquí «Error de RegEx»?
Esta página usa el motor de JavaScript, que rechaza parte de la sintaxis de otros motores, como los grupos con nombre (?P<name>…), los flags en línea como (?i) al principio, los grupos atómicos (?>…) y los cuantificadores posesivos como a++. Escribe los grupos con nombre como (?<name>…) y usa las casillas de «Flags» en lugar de flags en línea. Con el flag u, JavaScript también es más estricto con los escapes: \# es un error, igual que \- fuera de los corchetes, así que quita la barra invertida o desactiva u.
¿Por qué \p{L} no coincide con letras o un emoji cuenta como dos caracteres?
Las clases de propiedades Unicode como \p{L} necesitan el flag u; sin él, JavaScript interpreta \p{L} como el texto literal p{L}, y . solo coincide con una mitad de un carácter situado fuera del plano multilingüe básico, como muchos emojis. Al cargar un patrón de la chuleta también se cargan sus flags, y todos excepto «Caracteres especiales» dejan u desactivado, así que revisa «Flags» antes de añadir esa sintaxis. Incluso con u, . coincide con un punto de código, y algunos emojis, como las banderas o un pulgar arriba con tono de piel, están formados por dos o más. Las posiciones de los detalles de las coincidencias cuentan unidades de código UTF-16, como hace JavaScript, así que los caracteres situados fuera del plano multilingüe básico ocupan dos posiciones incluso con u.
¿Por qué \n en el reemplazo no inserta un salto de línea?
El reemplazo sigue las reglas de replace() de JavaScript: solo son especiales las secuencias que empiezan por $, así que \n y \t se insertan como una barra invertida seguida de una letra, no como un salto de línea o una tabulación. El campo admite una sola línea, así que aquí no se puede introducir un salto de línea; añádelo en el código generado. Para eliminar las coincidencias, marca «Reemplazar coincidencias por» y deja el campo vacío, como hace el patrón «Quitar etiquetas HTML/XML» de la chuleta.
¿Qué pasa si un patrón es muy lento o encuentra muchísimas coincidencias?
Cuando el navegador permite Web Workers, la búsqueda se ejecuta en un worker en segundo plano y se detiene a los 2 segundos, así que un patrón con retroceso catastrófico, como (a+)+$ aplicado a una larga serie de letras a seguida de otro carácter, muestra un mensaje en lugar de bloquear la página. El recuento de «Coincidencias» incluye todas las coincidencias, pero solo las primeras 1000 se resaltan y aparecen en los detalles.
¿Puedo pegar el código generado tal cual en mi proyecto?
Úsalo como punto de partida. El generador escribe el patrón como literal de expresión regular en JavaScript y como cadena en los demás lenguajes, reescribe los grupos con nombre y las referencias de reemplazo donde la sintaxis es distinta, como (?P<name>…) y \g<1> en Python, traduce los flags i, m y s, y espera tu entrada en una variable llamada text. Si el patrón contiene comillas o barras, comprueba que el fragmento las escapa correctamente. Los motores siguen siendo distintos: el paquete regexp de Go usa la sintaxis RE2, que no admite lookaround ni referencias inversas, y el módulo estándar re de Python no admite las clases \p{…}, así que prueba el código con tus propios datos.