VOOZH about

URL: https://dev.to/toolrapido/expresiones-regulares-en-javascript-guia-practica-con-ejemplos-reales-3nah

⇱ Expresiones regulares en JavaScript: guía práctica con ejemplos reales - DEV Community


Las expresiones regulares tienen fama de ilegibles, pero dominando una docena de patrones resuelves el 90% de los casos reales. Aquí van los más útiles con explicaciones.

Los métodos principales

// test() — devuelve boolean
/^\d+$/.test('123'); // true
/^\d+$/.test('12a'); // false

// match() — devuelve array o null
'foo123bar'.match(/\d+/); // ['123']
'foo123bar'.match(/\d+/g); // ['123'] (con /g devuelve todos)

// replace() — reemplazar
'hola mundo'.replace(/\s+/g, '-'); // 'hola-mundo'

// split() — dividir
'a,b,,c'.split(/,+/); // ['a', 'b', 'c']

Patrones de validación más usados

Email

const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
emailRegex.test('user@example.com'); // true
emailRegex.test('not-an-email'); // false

Teléfono español

// Móvil: empieza por 6 o 7, 9 dígitos
const phoneRegex = /^[67]\d{8}$/;
phoneRegex.test('612345678'); // true
phoneRegex.test('912345678'); // false (fijo)

URL

const urlRegex = /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;
urlRegex.test('https://toolrapido.com'); // true

Solo números

/^\d+$/.test('123'); // true
/^\d+$/.test('12.3'); // false
/^[\d.]+$/.test('12.3'); // true (con decimales)

Código postal español

/^(?:0[1-9]|[1-4]\d|5[0-2])\d{3}$/.test('28001'); // true (Madrid)
/^(?:0[1-9]|[1-4]\d|5[0-2])\d{3}$/.test('99999'); // false

Grupos de captura

// Extraer partes de una fecha DD/MM/YYYY
const match = '25/04/2026'.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if (match) {
 const [, day, month, year] = match;
 console.log(day, month, year); // '25' '04' '2026'
}

Grupos nombrados (ES2018)

const match = '25/04/2026'.match(/^(?<day>\d{2})\/(?<month>\d{2})\/(?<year>\d{4})$/);
match?.groups; // { day: '25', month: '04', year: '2026' }

Lookahead y lookbehind

// Lookahead positivo: palabra seguida de un número (sin capturar el número)
'precio100'.match(/\w+(?=\d)/); // ['precio']

// Lookbehind positivo: número precedido de euro
'€42'.match(/(?<=€)\d+/); // ['42']

// Lookahead negativo: palabras que NO van seguidas de un punto
'hola mundo.'.match(/\b\w+\b(?!\.)/g); // ['hola']

Transformaciones de texto útiles

// camelCase a kebab-case
'myVariableName'.replace(/([A-Z])/g, '-$1').toLowerCase();
// 'my-variable-name'

// Eliminar acentos
'café España'.normalize('NFD').replace(/[̀-ͯ]/g, '');
// 'cafe Espana'

// Slug para URLs
function slugify(str) {
 return str
 .toLowerCase()
 .normalize('NFD')
 .replace(/[̀-ͯ]/g, '')
 .replace(/[^a-z0-9]+/g, '-')
 .replace(/^-|-$/g, '');
}
slugify('Herramienta de Validación NIF'); // 'herramienta-de-validacion-nif'

// Truncar en límite de palabra
function truncate(str, max) {
 if (str.length <= max) return str;
 return str.slice(0, max).replace(/\s\S*$/, '') + '';
}

Flags importantes

/patrón/i // case-insensitive
/patrón/g // global (todas las coincidencias)
/patrón/m // multiline (^ y $ por línea)
/patrón/s // dotAll (. incluye saltos de línea)
/patrón/u // unicode (soporte completo de emojis y unicode)

Herramienta para probar regex

Si quieres probar expresiones regulares en tiempo real con texto de ejemplo y ver todas las coincidencias resaltadas, puedes usar este tester de regex gratuito.

Conclusión

Las regex son una herramienta poderosa, pero no siempre la mejor. Para parsing de HTML usa un DOM parser, para JSON usa JSON.parse(). Las regex brillan en validación de formatos, transformaciones de texto y extracción de patrones simples.