Probador de Regex

Prueba expresiones regulares contra un texto y ve todas las coincidencias resaltadas

Prueba un ejemplo

Patrón

//g

Texto de prueba

Se ejecuta localmente · Es seguro pegar secretos

¿Qué es una expresión regular?

Una expresión regular (regex o regexp) es una secuencia de caracteres que define un patrón de búsqueda. Los probadores de regex te permiten escribir un patrón, ejecutarlo contra texto de ejemplo y ver todas las coincidencias resaltadas en tiempo real. El concepto se remonta al trabajo del matemático Stephen Kleene sobre lenguajes regulares en los años 50, y Ken Thompson integró el primer motor de regex en el editor de texto QED en 1968.

Un motor de regex lee un patrón de izquierda a derecha, consumiendo caracteres de entrada mientras intenta encontrar coincidencias. Usa backtracking cuando una coincidencia parcial falla: el motor retrocede y prueba rutas alternativas en el patrón. Algunos motores (como RE2, usado en Go) evitan el backtracking por completo convirtiendo los patrones a autómatas finitos deterministas (DFA), lo que garantiza coincidencia en tiempo lineal a cambio de no soportar características como las referencias hacia atrás.

La sintaxis de regex está estandarizada de forma laxa. PCRE (Perl Compatible Regular Expressions) es la variante más común, soportada por PHP, el módulo re de Python y JavaScript con pequeñas diferencias. POSIX define una sintaxis más limitada usada por grep y sed. Las diferencias importan al portar patrones entre lenguajes: un lookahead que funciona en JavaScript puede no compilar en el motor RE2 de Go.

¿Por qué usar un probador de regex online?

Escribir regex en un archivo de código implica guardar, ejecutar e inspeccionar la salida cada vez que ajustas el patrón. Un probador de regex en el navegador reduce ese ciclo de retroalimentación a cero: escribes y ves las coincidencias al instante.

Resaltado de coincidencias en tiempo real
Cada pulsación de tecla actualiza los resultados al instante. Puedes ver qué partes del texto coinciden, qué grupos de captura están activos y exactamente dónde empieza y termina cada coincidencia. Sin ciclo de compilación-ejecución-depuración.
🔒
Procesamiento local y privado
La coincidencia de patrones se ejecuta en tu navegador usando el motor JavaScript RegExp. Ningún texto ni patrón se envía a un servidor. Esto es importante al probar contra archivos de log, datos de clientes o respuestas de API que contienen información sensible.
🔍
Inspección visual de coincidencias
Las coincidencias se resaltan directamente en el texto junto con sus posiciones y los valores de los grupos de captura. Ver las coincidencias visualmente facilita detectar errores de uno en cuantificadores o anclas faltantes.
🌐
Sin registro ni instalación
Funciona en cualquier dispositivo con un navegador moderno. Sin cuenta, sin extensión, sin plugin de IDE. Abre la página, pega tu patrón y texto, y empieza a probar.

Casos de uso del probador de regex

Validación de formularios en el frontend
Construye y verifica patrones para campos de correo electrónico, número de teléfono o tarjeta de crédito antes de incluirlos en atributos pattern de HTML5 o en la lógica de validación de JavaScript.
Análisis de logs en el backend
Escribe patrones regex que extraigan marcas de tiempo, códigos de error o direcciones IP de los logs de tu aplicación. Prueba contra muestras reales para confirmar que el patrón captura los grupos correctos.
DevOps e infraestructura
Depura regex usados en bloques location de Nginx, reglas de reescritura de Apache o reglas de alertas de Prometheus. Un patrón incorrecto en la configuración del servidor puede romper el enrutamiento o hacer que no lleguen alertas.
QA y automatización de pruebas
Valida que los cuerpos de respuesta o la salida HTML coincidan con los patrones esperados en las aserciones de pruebas end-to-end. Prueba el regex aquí antes de incluirlo en tu suite de pruebas.
Pipelines de extracción de datos
Prototipa patrones para extraer campos estructurados de texto no estructurado: scraping de precios de productos, análisis de casos límite en CSV o extracción de metadatos de cabeceras de correo.
Aprender expresiones regulares
Experimenta con metacaracteres, cuantificadores y grupos contra cadenas de ejemplo. La retroalimentación visual inmediata facilita aprender la sintaxis de regex más que leer documentación por sí solo.

Referencia rápida de sintaxis regex

La tabla siguiente cubre los tokens regex más utilizados. Funcionan en JavaScript, Python, Go, PHP y la mayoría de los motores compatibles con PCRE. Las extensiones específicas de cada lenguaje (como los patrones condicionales de Python o los grupos con nombre de JavaScript usando la sintaxis \k) están descritas en la sección de ejemplos de código.

PatrónNombreDescripción
.Any characterMatches any single character except newline (unless s flag is set)
\dDigitMatches [0-9]
\wWord characterMatches [a-zA-Z0-9_]
\sWhitespaceMatches space, tab, newline, carriage return, form feed
\bWord boundaryMatches the position between a word character and a non-word character
^Start of string/lineMatches the start of the input; with m flag, matches start of each line
$End of string/lineMatches the end of the input; with m flag, matches end of each line
*Zero or moreMatches the preceding token 0 or more times (greedy)
+One or moreMatches the preceding token 1 or more times (greedy)
?OptionalMatches the preceding token 0 or 1 time
{n,m}Quantifier rangeMatches the preceding token between n and m times
()Capturing groupGroups tokens and captures the matched text for back-references
(?:)Non-capturing groupGroups tokens without capturing the matched text
(?=)Positive lookaheadMatches a position followed by the given pattern, without consuming it
(?<=)Positive lookbehindMatches a position preceded by the given pattern, without consuming it
[abc]Character classMatches any one of the characters inside the brackets
[^abc]Negated classMatches any character not inside the brackets
|AlternationMatches the expression before or after the pipe

Flags de regex explicados

Los flags (también llamados modificadores) cambian cómo el motor procesa el patrón. En JavaScript se añaden después de la barra de cierre: /pattern/gi. En Python se pasan como segundo argumento: re.findall(pattern, text, re.IGNORECASE | re.MULTILINE). No todos los flags están disponibles en todos los lenguajes.

FlagNombreComportamiento
gGlobalFind all matches, not just the first one
iCase-insensitiveLetters match both uppercase and lowercase
mMultiline^ and $ match start/end of each line, not just the whole string
sDot-all. matches newline characters as well
uUnicodeTreat the pattern and subject as a Unicode string; enables \u{FFFF} syntax
yStickyMatches only from the lastIndex position in the target string

Ejemplos de código

Ejemplos de regex funcionales en JavaScript, Python, Go y la línea de comandos. Cada ejemplo muestra la construcción del patrón, la extracción de coincidencias y la salida.

JavaScript
// Match all email addresses in a string
const text = 'Contact us at support@example.com or sales@example.com'
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g

const matches = text.matchAll(emailRegex)
for (const match of matches) {
  console.log(match[0], 'at index', match.index)
}
// → "support@example.com" at index 14
// → "sales@example.com" at index 37

// Named capture groups (ES2018+)
const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
const result = '2026-03-30'.match(dateRegex)
console.log(result.groups)
// → { year: "2026", month: "03", day: "30" }

// Replace with a callback
'hello world'.replace(/\b\w/g, c => c.toUpperCase())
// → "Hello World"
Python
import re

# Find all IPv4 addresses
text = 'Server 192.168.1.1 responded, fallback to 10.0.0.255'
pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'

matches = re.findall(pattern, text)
print(matches)  # → ['192.168.1.1', '10.0.0.255']

# Named groups and match objects
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Released on 2026-03-30')
if m:
    print(m.group('year'))   # → '2026'
    print(m.group('month'))  # → '03'

# Compile for repeated use (faster in loops)
compiled = re.compile(r'\b[A-Z][a-z]+\b')
words = compiled.findall('Hello World Foo bar')
print(words)  # → ['Hello', 'World', 'Foo']
Go
package main

import (
	"fmt"
	"regexp"
)

func main() {
	// Find all matches
	re := regexp.MustCompile(`\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b`)
	text := "Contact support@example.com or sales@example.com"
	matches := re.FindAllString(text, -1)
	fmt.Println(matches)
	// → [support@example.com sales@example.com]

	// Named capture groups
	dateRe := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`)
	match := dateRe.FindStringSubmatch("2026-03-30")
	for i, name := range dateRe.SubexpNames() {
		if name != "" {
			fmt.Printf("%s: %s\n", name, match[i])
		}
	}
	// → year: 2026
	// → month: 03
	// → day: 30

	// Replace with a function
	result := re.ReplaceAllStringFunc(text, func(s string) string {
		return "[REDACTED]"
	})
	fmt.Println(result)
	// → Contact [REDACTED] or [REDACTED]
}
CLI (grep / sed)
# Find lines matching an IP address pattern
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' access.log

# Extract email addresses from a file
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt

# Replace dates from YYYY-MM-DD to DD/MM/YYYY using sed
echo "2026-03-30" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
# → 30/03/2026

# Count matches per file in a directory
grep -rcE 'TODO|FIXME|HACK' src/
# → src/main.js:3
# → src/utils.js:1

Preguntas frecuentes

¿Cuál es la diferencia entre regex y patrones glob?
Los patrones glob (como *.txt o src/**/*.js) son una sintaxis simplificada de comodines usada para encontrar rutas de archivo en shells y herramientas de construcción. Soportan * (cualquier carácter), ? (un carácter) y [] (clases de caracteres), pero carecen de cuantificadores, grupos, lookaheads y alternancia. Regex es mucho más expresivo y opera sobre texto arbitrario, no solo rutas de archivo. Un patrón glob *.json es aproximadamente equivalente al regex ^.*\.json$.
¿Cómo hago coincidir un punto literal o un corchete en regex?
Antepón una barra invertida al carácter: \. coincide con un punto literal, \[ con un corchete literal. Dentro de una clase de caracteres [], un punto ya es literal y no necesita escaparse. Un error frecuente es escribir 192.168.1.1 sin escapar los puntos, lo que también coincidiría con 192x168y1z1 porque . significa "cualquier carácter".
¿Mis datos de prueba se envían a un servidor?
No. Esta herramienta ejecuta la coincidencia de regex completamente en tu navegador usando el motor JavaScript RegExp. No se realizan peticiones de red con tu texto ni tu patrón. Puedes confirmarlo abriendo la pestaña Red de las DevTools de tu navegador mientras usas la herramienta.
¿Por qué mi regex funciona en JavaScript pero falla en Python?
JavaScript y Python usan motores de regex distintos con conjuntos de características ligeramente diferentes. JavaScript soporta \d, lookaheads (?=) y lookbehinds (?<=) desde ES2018, pero no soporta patrones condicionales, grupos atómicos ni cuantificadores posesivos. El módulo re de Python no soporta clases de propiedades Unicode \p{} (usa el módulo de terceros regex en su lugar). Prueba siempre en el motor del lenguaje de destino o consulta su documentación de regex.
¿Qué causa el backtracking catastrófico en regex?
El backtracking catastrófico ocurre cuando un patrón tiene cuantificadores anidados que crean un número exponencial de rutas de coincidencia. El ejemplo clásico es (a+)+ aplicado a una cadena de a's seguida de un carácter que no coincide. El motor prueba todas las formas posibles de repartir las a's entre los grupos interno y externo antes de fallar. Para evitarlo usa grupos atómicos (?>), cuantificadores posesivos a++, o reescribe el patrón para eliminar la repetición ambigua.
¿Puedo usar regex para analizar HTML?
Regex puede extraer valores simples de fragmentos HTML, como obtener el href de una etiqueta <a> individual. Para analizar HTML completo usa un parser adecuado (DOMParser en JavaScript, BeautifulSoup en Python, o html/template en Go). HTML es una gramática independiente del contexto, y regex solo maneja gramáticas regulares. Las etiquetas anidadas, los atributos opcionales y los elementos auto-cerrados generan patrones que regex no puede manejar de forma fiable.
¿Cuál es la diferencia entre cuantificadores voraces y perezosos?
Un cuantificador voraz (* o +) coincide con el máximo de caracteres posible y luego retrocede si el resto del patrón falla. Un cuantificador perezoso (*? o +?) coincide con el mínimo posible y se expande solo cuando es necesario. Para la entrada <b>uno</b><b>dos</b>, el patrón voraz <b>.*</b> coincide con toda la cadena desde el primer <b> hasta el último </b>, mientras que el patrón perezoso <b>.*?</b> coincide con <b>uno</b> y <b>dos</b> por separado.