Cómo usar el probador de regex
- Introduce tu patrón sin las barras que lo rodean, por ejemplo
\d{3}-\d{4}. - Activa los flags que necesites (
g,i,m,s,u,y). - Pega el texto de prueba. Las coincidencias se resaltan en directo y se muestra cada grupo de captura.
- Si quieres, introduce una cadena de reemplazo, con
$1o$<name>para los grupos, y verás una vista previa del resultado.
El probador usa el propio motor de expresiones regulares JavaScript de tu navegador. Tus patrones y tus datos de prueba se quedan en tu dispositivo y no se suben ni se guardan.
Sintaxis de las expresiones regulares en JavaScript de un vistazo
Las variantes de expresiones regulares cambian de un lenguaje a otro. Esta herramienta usa la variante de JavaScript (ECMAScript), así que los resultados coinciden con lo que hacen RegExp, String.prototype.match y replace en los navegadores y en Node.js. La mayor parte de la sintaxis sirve también en Python, PCRE y Java, pero detalles como la sintaxis de los grupos con nombre o el soporte de lookbehind varían.
Flags
| Flag | Nombre | Efecto |
|---|---|---|
g | global | Busca todas las coincidencias en lugar de detenerse en la primera. |
i | ignoreCase | No distingue entre mayúsculas y minúsculas. |
m | multiline | ^ y $ coinciden al principio y al final de cada línea. |
s | dotAll | . también coincide con los saltos de línea. |
u | unicode | Trata el patrón como puntos de código Unicode; activa los escapes de propiedad \p{...}. |
y | sticky | Solo busca coincidencias en la posición indicada por lastIndex. |
Elementos básicos
- Clases de caracteres:
[abc], rangos[a-z], negación[^0-9], abreviaturas\d(dígito),\w(carácter de palabra),\s(espacio en blanco) y sus negaciones\D,\W,\S. Sin el flagu,\wy\dsolo cubren ASCII. - Cuantificadores:
*(0 o más),+(1 o más),?(0 o 1),{n},{n,},{n,m}. Añade?para hacerlos perezosos:.*?. - Grupos:
(...)captura,(?:...)agrupa sin capturar,(?<year>\d{4})crea un grupo con nombre, y\1o\k<year>hacen referencia a él. - Anclas:
^,$y el límite de palabra\b. - Lookarounds:
(?=...)lookahead positivo,(?!...)lookahead negativo,(?<=...)lookbehind positivo,(?<!...)lookbehind negativo. Comprueban el contexto sin consumir caracteres.
// Importes precedidos de un signo de dólar, sin el signo
/(?<=\$)\d+(?:\.\d{2})?/g "Total: $42.50" → "42.50"
// Cambiar el formato de fechas con grupos con nombre
"2024-03-15".replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, "$<d>.$<m>.$<y>")
// "15.03.2024"
Patrones habituales
| Uso | Patrón | Limitaciones |
|---|---|---|
| Correo electrónico (simple) | ^[^\s@]+@[^\s@]+\.[^\s@]+$ | Solo una comprobación básica. La sintaxis completa de una dirección es mucho más compleja; confírmala enviando un correo. |
| Dirección IPv4 | ^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$ | Rechaza octetos mayores de 255 y ceros a la izquierda. No admite IPv6. |
| Fecha (AAAA-MM-DD) | ^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ | Acepta fechas imposibles como 2023-02-31. Valídalas con una biblioteca de fechas. |
| URL (http/https) | ^https?:\/\/[^\s/$.?#][^\s]*$ | Comprobación poco estricta. Usa el constructor URL para un análisis real. |
Para direcciones IP en concreto, el conversor de direcciones IP analiza y convierte tanto IPv4 como IPv6.
Errores frecuentes
Backtracking catastrófico
Los cuantificadores anidados o solapados pueden hacer que un motor con backtracking, como el de JavaScript, pruebe un número exponencial de caminos cuando no hay coincidencia. Unas pocas decenas de caracteres pueden bloquear una pestaña del navegador o, en un servidor, permitir un ataque de denegación de servicio (ReDoS):
/^(a+)+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!") // puede bloquearse
/^a+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!") // instantáneo
Evita patrones como (a+)+, (a|a)* o (.*)*, haz que las alternativas se excluyan entre sí y sé específico: [^"]* es más seguro que .* entre comillas.
Otras trampas
- Una regex con el flag
grecuerdalastIndex, así que llamar atest()varias veces sobre el mismo objeto alterna entretrueyfalse. - Al construir un patrón a partir de una cadena, hay que duplicar las barras invertidas:
new RegExp("\\d+"). - Si olvidas
^y$, un validador acepta cualquier entrada que simplemente contenga una coincidencia.
Preguntas frecuentes
¿Por qué mi regex funciona aquí pero no en Python o PHP?
Las variantes son distintas. Python escribe los grupos con nombre como (?P<name>...) y solo admite lookbehind de ancho fijo; el PCRE de PHP envuelve los patrones entre delimitadores. Las reglas de escape de los literales de cadena también cambian de un lenguaje a otro.
¿Qué diferencia hay entre cuantificadores codiciosos y perezosos?
Los cuantificadores codiciosos (.*) abarcan todo lo posible y luego retroceden; los perezosos (.*?) abarcan lo mínimo posible. Sobre <b>x</b>, <.*> coincide con toda la cadena, mientras que <.*?> solo coincide con <b>.
¿JavaScript admite lookbehind?
Sí, desde ES2018, y a diferencia de muchos motores admite lookbehind de longitud variable. Todos los navegadores principales actuales lo admiten.
¿Cómo busco un punto o un corchete literal?
Escápalo con una barra invertida: \., \[, \(. Dentro de una clase de caracteres la mayoría de los caracteres son literales, así que [.] también coincide con un punto.
Actualizado
Comentarios
Inicia sesión para valorar esta herramienta.
Comparte un consejo, haz una pregunta o cuenta cómo te funcionó la herramienta.
Aún no hay comentarios. Sé el primero en contar cómo te fue.