CodeForge

JavaScript de Cero a Experto / Strings, números y fechas

Regex desde cero: el detector de patrones

Teoría22 min20 XP

"¿Este texto es un celular colombiano válido?" includes no puede responder eso: no buscas un texto EXACTO, buscas una FORMA ("un 3 seguido de 9 dígitos"). Para describir formas de texto existen las expresiones regulares (regex). Tienen fama de jeroglífico, pero construidas pieza por pieza son perfectamente legibles — y hoy las construyes desde cero.

La regla del portero

Las piezas básicas

Léelas como frases: /gasto \d+/ dice "la palabra gasto, un espacio, y una o más cifras". Cada símbolo es una pieza de Lego; el patrón completo es la frase armada. Con seis piezas (\d, \w, \s, +, ?, las llaves de cantidad) cubres la mayoría de lo que necesitarás.

Validar formatos: las anclas

test busca el patrón EN CUALQUIER PARTE del texto. Para validar un formato completo necesitas anclar: ^ (aquí empieza) y $ (aquí termina).

La regla de bolsillo: ¿validando un campo completo? SIEMPRE ^...$. Sin anclas solo preguntas "¿aparece por ahí?"; con ellas exiges "el texto ES exactamente esto, de principio a fin". Las llaves también aceptan rangos: {3,15} es "entre 3 y 15 veces".

Extraer y limpiar

"$ 18.000".replace(/[^\d]/g, "") es un truco de oro para "Mi Bolsillo": borra todo lo que no sea dígito y deja el número limpio para Number(). Y ojo al doble papel del ^: fuera de corchetes ancla el inicio; DENTRO de corchetes significa "ninguno de estos".

Nota honesta: las regex son un mundo (grupos, lookaheads, banderas avanzadas...) y esta lección te da el 80% útil: clases, cuantificadores, anclas y las banderas g e i. Cuando un patrón se te vuelva un jeroglífico de verdad, pruébalo por piezas en la consola — y jamás intentes analizar HTML completo con regex: para eso existe el DOM, que llega en el próximo módulo.

Validas celulares con /3\d{9}/ (sin anclas) y un usuario escribe '573001234567' (con el indicativo 57 pegado). ¿Qué devuelve test y qué debiste escribir?

Mini-reto

En "Mi Bolsillo": valida estos tres datos con test y sus regex ancladas — un celular (/^3\d{9}$/), un código de recibo tipo REC-12345 (pista: el guion es literal, /^REC-\d{5}$/) y un año de 4 dígitos. Luego toma el string "Nequi: $ 45.000" y extráele el monto limpio combinando el replace de "solo dígitos" con Number().

Qué sigue

Módulo casi cerrado: plantillas, métodos de string, números exactos, formateo colombiano, fechas y patrones. El reto final lo junta TODO: vas a generar el recibo mensual de "Mi Bolsillo" — columnas alineadas, plata en formato COP, fecha en español y validación con regex. Como los de verdad.