Lo básico en un minuto
La mayoría de los caracteres coinciden consigo mismos: gato encuentra las letras g, a, t, o en ese orden, en cualquier parte del texto, también dentro de gatos. Unos pocos caracteres tienen significado especial: . ^ $ * + ? ( ) [ ] { } | y la barra invertida. Para buscar uno de ellos literalmente, ponle una barra invertida delante: \. encuentra un punto real y \$ un signo de dólar.
Los ejemplos usan la sintaxis de JavaScript, la que ejecutan los navegadores, Node.js y el probador de esta página. Python, PHP (PCRE), Java y .NET comparten casi todo; las diferencias están sobre todo en lookbehind, la forma de nombrar grupos y algunos escapes. Escribe el patrón en Expresión regular sin las barras, pega el texto en Texto de prueba y cada coincidencia se resalta.
Pruébalo aquí: Probador de regex
Abrir la herramienta completaCaracteres y clases
Una clase de caracteres coincide con un solo carácter de un conjunto. [aeiou] encuentra una vocal, [a-z] una letra minúscula ASCII, [^0-9] cualquier cosa que no sea un dígito. Dentro de los corchetes casi todos los caracteres especiales pierden su significado, así que [.?] encuentra un punto o un signo de interrogación. Si quieres un guion literal, ponlo al principio o al final: [-.] o [.-].
| Patrón | Coincide con | Ejemplo |
|---|---|---|
| . | Cualquier carácter menos el salto de línea | c.sa encuentra casa, cosa, c4sa |
| \d | Un dígito del 0 al 9 | \d\d encuentra 42 en Sala 42 |
| \w | Letra, dígito o guion bajo (solo ASCII) | \w+ encuentra usuario_01 |
| \s | Espacio, tabulación o salto de línea | a\sb encuentra a b |
| \D \W \S | Lo contrario de \d, \w y \s | \D encuentra la x de 4x4 |
| [abc] | Una de a, b o c | gr[ae]y encuentra gray y grey |
| [^abc] | Cualquier carácter salvo a, b o c | [^,]+ encuentra el texto entre comas |
| \p{L} | Cualquier letra de cualquier idioma (flag u) | \p{L}+ encuentra niño y canción completas |
| \b | Límite de palabra (no es un carácter) | \bsol\b encuentra sol pero no solo |
Cuantificadores, anclas y grupos
Los cuantificadores indican cuántas veces se repite lo que tienen delante. Las anclas coinciden con una posición, no con un carácter. Los grupos juntan partes del patrón, capturan lo que coincidió y permiten elegir entre alternativas.
| Patrón | Significado | Ejemplo |
|---|---|---|
| * | 0 o más veces | ab*c encuentra ac, abc, abbc |
| + | 1 o más veces | \d+ encuentra 7 y 2026 |
| ? | 0 o 1 vez (opcional) | colou?r encuentra color y colour |
| {3} | Exactamente 3 veces | \d{3} encuentra 555 |
| {2,4} | Entre 2 y 4 veces | \d{2,4} encuentra 12, 123, 1234 |
| {2,} | 2 o más veces | a{2,} encuentra aa y aaaa |
| *? +? ?? | Perezoso: lo menos posible | <.+?> encuentra <b> y </b> por separado |
| ^ | Inicio del texto (o de la línea con flag m) | ^Error solo encuentra Error al principio |
| $ | Final del texto (o de la línea con flag m) | \.pdf$ encuentra nombres que terminan en .pdf |
| (abc) | Grupo de captura, se reutiliza como $1 | (\d{4})-(\d{2}) captura año y mes |
| (?:abc) | Grupo sin captura | (?:ab)+ encuentra ababab |
| (?<anio>\d{4}) | Grupo con nombre, se reutiliza como $<anio> | Aparece como anio en la tabla de grupos |
| a|b | a o b | gato|perro encuentra cualquiera de las dos |
| (?=x) (?!x) | Seguido de x, no seguido de x | \d+(?=px) encuentra 16 en 16px |
| (?<=x) (?<!x) | Precedido de x, no precedido de x | (?<=\$)\d+ encuentra 25 en $25 |
Flags
Los flags cambian el comportamiento de todo el patrón. En el probador son casillas junto al patrón; en código JavaScript van después de la barra de cierre, como en /gato/gi.
- g (global): encuentra todas las coincidencias en vez de parar en la primera. Necesario para reemplazar todo.
- i (ignorar mayúsculas): Gato, GATO y gato coinciden con gato.
- m (multilínea): ^ y $ coinciden al inicio y al final de cada línea, no solo del texto completo. Úsalo con registros y listas.
- s (dotAll): el punto también incluye saltos de línea, así .* puede abarcar varias líneas.
- u (Unicode): activa \p{L} y otros escapes de propiedad, trata los emoji como un solo carácter y rechaza escapes desconocidos.
- y (fijo o sticky): la coincidencia debe empezar justo donde terminó la anterior. Se usa sobre todo al escribir analizadores.
Patrones probados para correo, teléfono y fechas
Estos patrones se probaron con ejemplos válidos e inválidos. Añade ^ al principio y $ al final cuando valides un campo completo, y quítalos cuando busques dentro de un texto más largo.
Correo: [\w.+-]+@[\w-]+(\.[\w-]+)+ acepta ana.lopez+noticias@correo.ejemplo.com.mx y a@b.co, y rechaza yo@localhost porque exige un punto en el dominio. Es el patrón Correo de Patrones habituales en el probador. Como \w no incluye ñ ni vocales con tilde, también rechaza una dirección como peña@ejemplo.com; en la práctica casi todas las direcciones son ASCII. Ninguna regex confirma que una dirección exista: para eso envía un correo de confirmación.
Teléfono en formato internacional E.164: \+[1-9]\d{6,14} acepta +5215512345678 y +34612345678, el formato que piden los servicios de SMS y llamadas (un más, el código de país y como máximo 15 dígitos en total). Para números españoles de 9 cifras escritos a mano, (\+34\s?)?[6-9]\d{2}\s?\d{3}\s?\d{3} acepta 612 345 678, +34 612345678 y 912 345 678. Antes de guardar un número, normalízalo quitando todo lo que no sea dígito. Para encontrar en un texto números internacionales variados, como +44 20 7946 0958 o +1 (555) 123-4567, usa el patrón Teléfono de Patrones habituales en el probador.
Fecha ISO AAAA-MM-DD: \d{4}-\d{2}-\d{2} encuentra todo lo que tiene forma de fecha. La versión estricta (19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) rechaza el mes 13 y el día 00, pero sigue aceptando 2026-02-31. La regex comprueba la forma; si el día existe lo comprueban las funciones de fecha de tu lenguaje.
Para pasar fechas al formato día/mes/año, busca (\d{4})-(\d{2})-(\d{2}), marca Reemplazar con, escribe $3/$2/$1 en el campo de al lado y 2026-10-26 se convierte en 26/10/2026.
Errores comunes y cómo corregirlos
- No escapar el punto: ejemplo.com también encuentra ejemploXcom. Escribe ejemplo\.com.
- Coincidencia codiciosa: <.+> sobre <b>negrita</b> se lleva todo el texto. Usa la versión perezosa <.+?> o una clase negada <[^>]+>.
- Olvidar las anclas al validar: \d{5} acepta abc12345xyz porque encuentra cinco dígitos dentro. Usa ^\d{5}$.
- Esperar que \w incluya ñ, á o ü: sin el flag u solo cubre A-Z, a-z, 0-9 y _. Para nombres en español usa \p{L} con el flag u.
- Olvidar el flag g: el reemplazo cambia solo la primera coincidencia y el probador muestra una sola.
- Cuantificadores anidados como (a+)+ o (\w+\s?)+$: con ciertos textos tardan un tiempo exponencial, lo que se llama backtracking catastrófico. El probador detiene el patrón a los 1,5 segundos y te avisa; reescríbelo para que cada parte solo pueda coincidir de una manera.
- Analizar HTML o JSON con regex: sirve para una búsqueda rápida, no para un análisis fiable. Para estructuras anidadas usa un analizador.
Cómo construir un patrón paso a paso
Empieza con un trozo literal del texto que buscas, por ejemplo 2026-10-26, y comprueba que coincide. Luego cambia partes por clases una a una: \d{4}-10-26 y después \d{4}-\d{2}-\d{2}. Tras cada cambio mira qué más se resalta en el texto de prueba, y añade algunas líneas que no deberían coincidir. Un buen texto de prueba incluye los casos que quieres y los que casi coinciden.
La tabla de Coincidencias muestra la posición y todos los grupos capturados de cada coincidencia. Si un grupo muestra la parte equivocada, mueve los paréntesis. Cuando el patrón funcione, cópialo a tu código tal cual: JavaScript y el probador usan el mismo motor, así que el resultado será idéntico.