BrunoP.Blog

Odiaba las regex hasta que tuve que encontrar 4.000 correos en un archivo gigante

Pasé horas filtrando un log a mano hasta que una línea de regex lo resolvió en segundos. Parece hechizo, pero es pura lógica — y te dejo un playground con presets (código postal, teléfono, identificación) para probar ahora.

El otro día estaba en el trabajo con una tarea que parecía simple: tomar una exportación enorme — un .txt de log con unos cientos de miles de líneas — y sacar de ahí todos los correos que aparecían en medio del desorden. Sin formato fijo, sin una columna ordenada de planilla. Correos sueltos entre marcas de tiempo, IDs, mensajes de error, JSON roto, todo mezclado.

Empecé como quizá empezarías tú: a mano. Ctrl+F, “@”, copiar, pegar en otra pestaña, repetir. Después de unos veinte minutos ya odiaba mi propia vida y había extraído unas treinta líneas de un archivo que tenía miles. Ahí un colega miró de reojo y dijo: “¿por qué no le tiras una regex?”

Yo, que siempre torcí la nariz ante las regex — ese montón de \d+([a-z]?)* que parece un gato caminando sobre el teclado —, me tragué el orgullo y probé. Pegué una línea. Cuatro mil y pico de correos resaltados al instante. Lo que me iba a llevar la tarde entera salió en literalmente segundos. Desde ese día mi relación con las regex cambió. Deja que te cuente por qué — y al final hay un playground para que lo sientas en carne propia.

Qué es una regex, sin misterio

“Regex” es la abreviatura de expresión regular: un mini lenguaje cuyo único trabajo es describir patrones de texto. En vez de buscar una palabra exacta, describes la forma de lo que quieres encontrar. “Algo, arroba, algo, punto, dos o tres letras” se vuelve un correo. “Cinco dígitos, guion, tres dígitos” se vuelve un código postal.

La gran clave es ese cambio de cabeza: dejas de pensar “qué texto busco” y pasas a pensar “qué regla obedece este texto”. Parece un hechizo visto de afuera, pero por dentro es pura lógica — combinable, predecible, del tipo que las computadoras aman.

El alfabeto secreto (que cabe en una servilleta)

Lo que asusta de las regex es su aspecto, no la cantidad de cosas que hay que aprender. Lo esencial cabe en tres grupitos:

  • Clasesqué tipo de carácter. \d es un dígito, \w es letra/número/guion bajo, \s es espacio, y . es “cualquier cosa”. Entre corchetes armas la tuya: [aeiou] casa cualquier vocal.
  • Cuantificadorescuántas veces. + es “una o más”, * es “cero o más”, ? es “opcional”, y {2,3} es “de dos a tres veces”.
  • Anclas y gruposdónde y qué. ^ es el inicio de la línea, $ es el final, y los paréntesis ( ) crean un grupo de captura — un pedacito que quieres guardar aparte.

Junta todo y ese correo se vuelve algo como [\w.+-]+@[\w-]+\.[\w.-]+: “uno o más caracteres de nombre, una arroba, el dominio, un punto, y el resto del dominio”. Léelo en voz alta y tiene sentido.

Dos curiosidades que me hicieron respetar las regex

1. Son más viejas que casi todo. La teoría detrás viene de los años 1950, del matemático Stephen Kleene (ese * se llama “estrella de Kleene” en su honor). Cuando el editor de texto QED y después el ed de Unix popularizaron la idea en los 60 y 70, las regex ya eran un estándar maduro. Usas matemática de hace setenta años cada vez que filtras un log.

2. Tienen un lado peligroso. Existe un ataque real llamado ReDoS (regex denial of service): ciertas expresiones mal escritas, ante una entrada maliciosa, explotan en tiempo de procesamiento y cuelgan el servidor. El clásico es algo como (a+)+$. Es un lindo recordatorio de que “simple” no es lo mismo que “inofensivo” — y de que entender la herramienta importa.

Mi opinión honesta, tras años usándolas

Las regex no son para todo. Para validar de verdad un correo, con todas las reglas del mundo real, la regex es una trampa — terminas con un monstruo ilegible que igual falla casos. ¿Parsear HTML con ellas? Ni lo pienses. Pero para encontrar, extraer y transformar texto rapidísimo — en un log, un editor, un pipeline de datos — son insustituibles. Es la diferencia entre pasar la tarde en Ctrl+F y resolverlo en una línea.

El secreto que nadie cuenta: no necesitas memorizar las regex. Necesitas entender los tres grupitos de arriba y tener un lugar para probar en vivo, viendo los matches encenderse mientras escribes. El costo de equivocarte cae a cero, y ahí aprendes de verdad. Es exactamente eso lo que te armé.

A jugar 👇

Aquí abajo hay un playground de regex que corre 100% en tu navegador, sin enviar nada a ningún servidor. Escribe un patrón, elige las flags, pega un texto y mira los trechos casados encenderse en tiempo real. Trae presets con sabor brasileño — correo, código postal, teléfono, CPF, fecha y URL — y una mini guía de bolsillo al lado. Equivócate cuanto quieras: una regex inválida solo muestra un aviso amigable, nada se rompe.

regex-playground.js

Corre 100% en tu navegador (el RegExp nativo de JavaScript). Nada se envía a ningún servidor.

Si jugaste con el juguete de arriba y en algún momento pensaste “espera, esto es súper útil” — así me sentí exactamente aquel día con el log. Tomo un problema molesto del día a día, entiendo la lógica detrás, y lo convierto en una herramientita que de verdad lo resuelve. Así es más o menos como trabajo. Si tienes un proyecto en mente — un producto, una automatización, una herramienta interna que le ahorraría horas a tu equipo — me encantaría escucharlo. ¿Charlamos?

Hablemos de tu proyecto