Command Palette

Search for a command to run...

Clases de Caracteres en Expresiones Regulares

Usa clases de caracteres predefinidas y personalizadas para coincidir con tipos específicos de caracteres en tus patrones de búsqueda.

Lectura: 10 min
Nivel: Principiante

TL;DR - Resumen rápido

  • Las clases de caracteres permiten definir conjuntos de caracteres válidos para una posición
  • Las clases predefinidas como \d, \w y \s coinciden con dígitos, palabras y espacios
  • Las clases personalizadas [abc] permiten definir exactamente qué caracteres aceptar
  • Los rangos [a-z] y [0-9] simplifican la definición de clases
  • La negación [^abc] coincide con cualquier carácter excepto los especificados

Introducción a las Clases de Caracteres

Las clases de caracteres son una de las características más poderosas de las expresiones regulares. Te permiten definir un conjunto de caracteres que pueden coincidir en una posición específica del patrón. En lugar de escribir múltiples alternativas como "a|b|c", puedes usar una clase de caracteres "[abc]" que es más concisa y eficiente.

JavaScript ofrece dos tipos principales de clases de caracteres: las clases predefinidas (shorthand) como \d, \w y \s, y las clases personalizadas que creas entre corchetes [abc]. Cada tipo tiene sus usos específicos y ventajas según el caso de uso.

  • Clases predefinidas: \d (dígitos), \w (palabras), \s (espacios)
  • Clases personalizadas: [abc] (caracteres específicos), [a-z] (rangos)
  • Negación: [^abc] (todo excepto los especificados)
  • Combinación: [a-zA-Z0-9] (letras y números)
  • Propiedades Unicode: \p{L}, \p{N} (requieren flag u)

Sintaxis de clases de caracteres

Las clases de caracteres personalizadas se escriben entre corchetes cuadrados:[abc] coincide con 'a', 'b' o 'c'. Los metacaracteres dentro de corchetes pierden su significado especial, excepto ^al inicio y - entre caracteres.

Clases Predefinidas

Las clases predefinidas (también llamadas shorthand) son atajos para clases de caracteres comunes. JavaScript proporciona tres clases principales: \d para dígitos, \w para caracteres de palabra y \s para espacios en blanco. Estas clases son muy útiles para validación de formularios, extracción de datos y limpieza de texto.

Clase \\d (Dígitos)

La clase \d coincide con cualquier dígito del 0 al 9. Es equivalente a la clase personalizada [0-9]. Esta clase es ideal para validar números de teléfono, códigos postales, años y cualquier dato que deba contener solo dígitos.

clase-digitos.js
Loading code...

El ejemplo muestra cómo usar \d para extraer dígitos de un string. match() devuelve todos los dígitos encontrados cuando se combina con el flag global. Esto es útil para limpiar strings que contienen números mezclados con texto.

Clase \\w (Palabras)

La clase \w coincide con cualquier carácter de palabra: letras (a-z, A-Z), dígitos (0-9) y el guion bajo (_). Es equivalente a [a-zA-Z0-9_]. Esta clase es útil para extraer palabras, validar identificadores y procesar texto.

clase-palabras.js
Loading code...

Este ejemplo muestra cómo \w coincide con letras, números y guiones bajos. Los espacios y signos de puntuación no coinciden, lo que permite extraer las palabras de un string de manera eficiente.

Advertencia: \\w no incluye acentos

La clase \w NO incluye caracteres con acentos como á, é, í, ó, ú ni caracteres especiales como ñ. Para incluir estos caracteres, usa una clase personalizada como [a-zA-Záéíóúñ] o propiedades Unicode con el flag 'u': \p{L}.

Clase \\s (Espacios)

La clase \s coincide con cualquier espacio en blanco: espacios, tabuladores, saltos de línea y retornos de carro. Es equivalente a [\t\n\r\f\v ]. Esta clase es útil para normalizar espacios, dividir strings y limpiar texto.

clase-espacios.js
Loading code...

El ejemplo muestra cómo usar \s para encontrar y reemplazar espacios múltiples con un solo espacio. Esto es una técnica común para normalizar texto y eliminar espacios redundantes.

Negación de clases predefinidas

Puedes negar las clases predefinidas usando mayúsculas: \D(no dígitos), \W (no palabras), \S (no espacios). Estas negaciones coinciden con cualquier carácter que NO esté en la clase original.

Clases de Caracteres Personalizadas

Las clases personalizadas te permiten definir exactamente qué caracteres aceptar en una posición. Se escriben entre corchetes [abc] y coinciden con cualquiera de los caracteres especificados. Esta es la forma más flexible de crear clases de caracteres, ya que puedes incluir cualquier carácter que necesites.

Sintaxis Básica

Una clase personalizada [abc] coincide con 'a', 'b' o 'c'. El orden de los caracteres dentro de los corchetes no importa. Puedes incluir cualquier carácter, incluyendo espacios y símbolos.

clase-personalizada-basica.js
Loading code...

Este ejemplo muestra cómo crear una clase que coincide con vocales. match() encuentra todas las vocales en el texto cuando se usa con el flag global. Las clases personalizadas son muy flexibles y puedes adaptarlas a tus necesidades específicas.

Rangos de Caracteres

Los rangos te permiten definir un intervalo de caracteres usando un guion. Por ejemplo, [a-z] coincide con cualquier letra minúscula de la 'a' a la 'z', y [0-9] coincide con cualquier dígito. Los rangos hacen las expresiones regulares más concisas y legibles.

clase-rangos.js
Loading code...

Este ejemplo muestra cómo usar rangos para coincidir con letras minúsculas y mayúsculas. El rango [a-z] coincide con cualquier letra minúscula, y [A-Z] con cualquier mayúscula. Puedes combinar múltiples rangos en una sola clase.

Mejor práctica: Combinar rangos

Para coincidir con letras y números, usa [a-zA-Z0-9] en lugar de escribir todos los caracteres individualmente. Los rangos hacen las expresiones regulares más legibles y fáciles de mantener.

Rangos de Caracteres Avanzados

Los rangos de caracteres pueden ser más complejos que simplemente [a-z] o [0-9]. Puedes combinar múltiples rangos, incluir caracteres individuales y mezclar rangos con caracteres específicos para crear clases de caracteres muy precisas.

Combinando Múltiples Rangos

Puedes combinar varios rangos en una sola clase de caracteres. Por ejemplo, [a-zA-Z0-9] coincide con letras mayúsculas, minúsculas y números. Esto es equivalente a la clase \w pero sin incluir el guion bajo.

rangos-combinados.js
Loading code...

Este ejemplo muestra cómo combinar rangos para crear una clase que coincide con letras mayúsculas, minúsculas y números. La clase [a-zA-Z0-9] es muy común para validar identificadores y extraer texto alfanumérico.

Caracteres Especiales en Rangos

Algunos caracteres especiales dentro de los corchetes necesitan ser escapados, especialmente el guion (-) y el corchete de cierre (]). El guion debe ir al principio o al final de la clase, o ser escapado con una barra invertida.

rangos-caracteres-especiales.js
Loading code...

Este ejemplo muestra cómo incluir caracteres especiales en clases de caracteres. El guion al inicio [-abc] o al final [abc-] no se interpreta como un rango. El corchete de cierre debe escaparse [\]].

Advertencia: Guion en rangos

El guion (-) dentro de corchetes crea un rango entre dos caracteres. Para incluir un guion literal, colócalo al principio [-abc], al final [abc-], o escápalo [a\-bc]. Si no,[a-z] crea un rango de 'a' a 'z', no coincide con 'a', '-' y 'z'.

Negación de Clases de Caracteres

La negación de clases te permite coincidir con cualquier carácter EXCEPTO los especificados. Se usa el símbolo de circunflejo (^) al inicio de la clase: [^abc] coincide con cualquier carácter excepto 'a', 'b' o 'c'. Esto es útil para filtrar caracteres no deseados o validar que un string no contenga ciertos caracteres.

Negación Básica

La negación [^abc] coincide con cualquier carácter excepto 'a', 'b' o 'c'. El circunflejo (^) debe ser el primer carácter dentro de los corchetes. Si está en otra posición, se interpreta como el carácter literal '^'.

negacion-basica.js
Loading code...

Este ejemplo muestra cómo usar la negación para encontrar todos los caracteres que no son vocales. La clase [^aeiou] coincide con cualquier carácter excepto las vocales especificadas.

Negación con Rangos

Puedes combinar la negación con rangos para crear clases más complejas. Por ejemplo, [^a-z] coincide con cualquier carácter excepto letras minúsculas. Esto es útil para validar que un string no contenga ciertos tipos de caracteres.

negacion-rangos.js
Loading code...

Este ejemplo muestra cómo usar negación con rangos para encontrar caracteres que no son letras minúsculas. La clase [^a-z] coincide con mayúsculas, números, espacios y símbolos, pero no con letras minúsculas.

Negación de clases predefinidas

Las clases predefinidas también tienen su versión negada: \D(no dígitos), \W (no palabras), \S (no espacios). Estas son equivalentes a [^0-9], [^a-zA-Z0-9_]y [^\s] respectivamente.

Clases Shorthand y Referencia Rápida

Las clases shorthand son atajos para clases de caracteres comunes. Ya hemos visto \d, \w y \s, pero también existen sus versiones negadas \D, \W y \S. Conocer estas clases te permite escribir expresiones regulares más concisas y legibles.

Referencia de Clases Shorthand

Aquí tienes una referencia completa de todas las clases shorthand disponibles en JavaScript y sus equivalentes con clases personalizadas.

shorthand-referencia.js
Loading code...

Este ejemplo muestra todas las clases shorthand y sus equivalentes con clases personalizadas. Las clases negadas (\D, \W, \S) coinciden con cualquier carácter que NO esté en la clase original.

Mejor práctica: Usa shorthand cuando sea apropiado

Usa \d, \w y \s cuando necesites sus clases estándar. Solo usa clases personalizadas cuando necesites caracteres específicos o rangos personalizados. Esto hace tus expresiones regulares más legibles y mantenibles.

Resumen: Clases de Caracteres

Conceptos principales:

  • Las clases de caracteres definen conjuntos de caracteres válidos
  • \d coincide con dígitos [0-9], \w con palabras [a-zA-Z0-9_]
  • \s coincide con espacios [\t\n\r\f\v ]
  • [abc] coincide con a, b o c (clase personalizada)
  • [a-z] define un rango de caracteres
  • [^abc] niega la clase (todo excepto a, b, c)

Mejores prácticas:

  • Usa \d, \w, \s para clases estándar (más legible)
  • Usa clases personalizadas para caracteres específicos
  • Combina rangos: [a-zA-Z0-9] para letras y números
  • Escapa guion y corchete en clases: [\]a-z-]
  • Recuerda que \w NO incluye acentos ni ñ
  • Usa \D, \W, \S para negación de clases estándar