Probador de expresiones regulares

Prueba expresiones regulares con flags y ve cada coincidencia y grupo en tiempo real.

Regex online: prueba expresiones regulares con coincidencias, grupos y reemplazo

Escribe el patrón en Pattern, los flags en Flags y pega el texto en el área de abajo. El probador lista cada coincidencia con su posición y el valor de cada grupo de captura, tanto numerado (`$1`, `$2`) como con nombre. Si rellenas Replace with, ves al momento el texto con la sustitución aplicada. Las expresiones regulares se evalúan con el motor de JavaScript de tu navegador, el mismo que ejecuta tu código de front-end y Node.js, y el texto no sale de tu equipo.

Cómo usar el probador de regex

Escribe el patrón sin las barras: #(\d+) en lugar de /#(\d+)/g. El probador busca siempre todas las coincidencias, así que no necesitas el flag g para verlas; los flags que escribas sí se aplican al reemplazo, donde importan.

Pattern:  #(\d+)
Texto:    Pedido #1042 enviado el 2026-09-21, pedido #1043 pendiente.

Matches: 2
#1042 at 7    $1: 1042
#1043 at 43   $1: 1043

La posición es el índice, contando desde cero, del primer carácter de la coincidencia: el mismo valor que match.index en JavaScript. Si el patrón no es válido, en lugar de resultados aparece el mensaje del motor, por ejemplo Unterminated group en Chrome cuando falta cerrar un paréntesis. Para que la página no se bloquee, se muestran como máximo 500 coincidencias.

Flags de las expresiones regulares en JavaScript

g   global: todas las coincidencias (en el reemplazo: reemplaza todas)
i   no distingue mayúsculas y minúsculas
m   multilínea: ^ y $ coinciden al principio y al final de cada línea
s   dotAll: el punto también coincide con saltos de línea
u   Unicode: puntos de código completos y escapes \p{…}
v   unicodeSets: u más operaciones de conjuntos en clases (ES2024)
y   sticky: solo coincide en lastIndex
d   indices: guarda la posición inicial y final de cada grupo

Dos flags explican la mayoría de sorpresas. Sin m, ^ y $ solo coinciden al principio y al final de todo el texto, así que un patrón pensado para validar cada línea de una lista pegada no encuentra nada. Sin s, el punto se detiene en los saltos de línea y <p>.*</p> falla si la etiqueta ocupa varias líneas.

Grupos de captura y reemplazo

Cada coincidencia muestra sus grupos. Un grupo con nombre aparece dos veces, por su número y por su nombre, porque en JavaScript también está numerado. Un grupo opcional que no participó se muestra como undefined.

El campo Replace with aplica texto.replace(patrón, reemplazo) con tus flags. Sin g solo se sustituye la primera coincidencia, igual que en JavaScript; añade g para reemplazarlas todas. En el reemplazo, $1 inserta el primer grupo, $<nombre> un grupo con nombre, $& la coincidencia completa y $$ un signo de dólar literal.

Pattern:  (?<a>\d{4})-(?<m>\d{2})-(?<d>\d{2})
Matches:  2026-09-21 at 24   $1: 2026  $2: 09  $3: 21  a: 2026  m: 09  d: 21
Replace:  $<d>/$<m>/$<a>
Result:   Pedido #1042 enviado el 21/09/2026, pedido #1043 pendiente.

Otros lenguajes escriben el reemplazo de otra forma. Python y sed usan \1 y \g<nombre>, y un reemplazo al estilo de Python pegado en JavaScript inserta el texto literal \1. Comprueba siempre la sintaxis del lenguaje donde vas a usar el patrón.

Chuleta de expresiones regulares

.            cualquier carácter salvo saltos de línea (con s: cualquiera)
\d \w \s     dígito, carácter de palabra [A-Za-z0-9_], espacio en blanco
\D \W \S     lo contrario de cada uno
[abc] [^abc] [a-z]    clase, clase negada, rango
^ $          inicio y fin del texto (con m: de cada línea)
\b           límite de palabra
* + ?        0 o más, 1 o más, 0 o 1 (codiciosos)
*? +? ??     lo mismo, perezosos: lo mínimo posible
{3} {2,5} {2,}        exactamente, entre, al menos
(…)  (?<n>…)  (?:…)   grupo, grupo con nombre, grupo sin captura
a|b          alternativa
(?=…) (?!…) (?<=…) (?<!…)   lookahead y lookbehind, positivos y negativos
\1 \k<n>     referencia a un grupo

Para usar como literales los caracteres especiales . * + ? ^ $ { } ( ) | [ ] \ /, escápalos con una barra invertida: \. coincide con un punto, mientras que . coincide con cualquier cosa. Dentro de una clase casi todos pierden su significado especial, así que [.] también es un punto literal.

Tildes, eñes y otros motores

En JavaScript, \w es siempre [A-Za-z0-9_], incluso con el flag u. Por eso ^\w+$ no acepta año, mientras que ^\p{L}+$ con el flag u sí. En Python 3, \w incluye las letras con tilde por defecto, y re.fullmatch(r'\w+', 'año') coincide.

Lo básico es común a JavaScript, PCRE (PHP), Python, Java y .NET, pero no todo. El módulo re de Python escribe los grupos con nombre como (?P<nombre>…) y rechaza la forma (?<nombre>…) que usan JavaScript, PCRE, Java y .NET. RE2, el motor de Go, no tiene lookarounds ni referencias hacia atrás a cambio de garantizar tiempo lineal. Los cuantificadores posesivos (a++) y los grupos atómicos existen en PCRE y Java, no en JavaScript. Si el patrón va a ejecutarse en otro lenguaje, quédate en el subconjunto común o pruébalo también allí.

Validar con expresiones regulares: email y otros casos

Para validar, ancla los dos extremos: \d{5} encuentra cinco dígitos dentro de abc123456, mientras que ^\d{5}$ solo acepta exactamente cinco. Prueba también textos que deben fallar: vacío, espacios de más, entradas muy largas y caracteres de otros alfabetos.

Para el email, una expresión regular razonable comprueba la forma general y deja la verificación real al correo de confirmación:

^[^\s@]+@[^\s@]+\.[^\s@]+$

ana.lopez@example.com    coincide
josé@ejemplo.es          coincide
ana@localhost            no coincide
ana lopez@example.com    no coincide
ana@@example.com         no coincide

Los patrones que intentan cubrir toda la gramática de las direcciones son enormes y aun así rechazan direcciones válidas. Evita también los cuantificadores anidados como (a+)+$: con un texto que casi coincide pueden tardar un tiempo exponencial y bloquear la pestaña o el servidor, el origen de las vulnerabilidades ReDoS.

Frequently asked questions

¿Cómo probar una expresión regular online?

Escribe el patrón sin barras en Pattern, añade flags como i o m y pega el texto. Cada coincidencia aparece con su posición y sus grupos, y los errores del patrón se muestran al momento.

¿Qué motor de expresiones regulares usa el probador?

El motor de JavaScript (ECMAScript) de tu navegador, el mismo que usan el front-end y Node.js. La mayor parte de la sintaxis coincide con PCRE, Python y Java, con diferencias en Unicode, grupos con nombre y funciones avanzadas.

¿Por qué mi regex solo coincide con la primera línea?

Sin el flag m, ^ y $ solo coinciden al principio y al final de todo el texto. Añade m para que coincidan en cada salto de línea.

¿Cómo uso los grupos en un reemplazo?

Escribe $1, $2 para los grupos numerados y $<nombre> para los grupos con nombre en Replace with. Añade el flag g para reemplazar todas las coincidencias y no solo la primera.

¿Por qué \w no reconoce la ñ ni las tildes?

En JavaScript, \w equivale siempre a [A-Za-z0-9_]. Usa \p{L} con el flag u para aceptar letras de cualquier idioma.

¿Se envía mi texto a algún servidor?

No. La búsqueda y el reemplazo se ejecutan en tu navegador, y nada se sube ni se guarda.