DEV Community

ToolRapido
ToolRapido

Posted on

Expresiones regulares en JavaScript: guía práctica con ejemplos reales

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']
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Solo números

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

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
Enter fullscreen mode Exit fullscreen mode

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'
}
Enter fullscreen mode Exit fullscreen mode

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' }
Enter fullscreen mode Exit fullscreen mode

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']
Enter fullscreen mode Exit fullscreen mode

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*$/, '') + '';
}
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)