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
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.
Top comments (0)