UTILIDADES Y HERRAMIENTAS
Expresiones regulares
Una ficha de consulta para comprender y construir expresiones regulares utilizadas en búsqueda, validación y procesamiento de texto.
FUNDAMENTOS
Qué es una expresión regular
Una expresión regular, también conocida como regex, describe un patrón que puede utilizarse para buscar, reconocer o transformar texto.
Por ejemplo, el patrón:
casa
coincide con la secuencia literal casacuando aparece en el texto analizado.
Una expresión regular no es un lenguaje universal con una única implementación. JavaScript, Python, Java, .NET, herramientas Unix y otros entornos utilizan motores con características y diferencias propias.
CONCEPTOS
Patrón y coincidencia
El patrón define qué queremos localizar. El motor de expresiones regulares compara ese patrón con una cadena de entrada y determina si existen coincidencias.
Patrón
↓
Texto de entrada
↓
Motor de expresiones regulares
↓
Coincidencia o resultado
Dependiendo de la herramienta o API utilizada, el resultado puede indicar simplemente si existe una coincidencia o proporcionar además el texto encontrado, su posición y los grupos capturados.
SINTAXIS
Caracteres literales
Muchos caracteres representan literalmente su propio valor dentro de una expresión regular.
casaLinux2026
El patrón Linux, por ejemplo, busca normalmente esa secuencia concreta de caracteres.
La distinción entre mayúsculas y minúsculas depende del motor y de las opciones utilizadas. Un patrón puede ser sensible a mayúsculas por defecto y permitir un modo que ignore esa diferencia.
SINTAXIS
Metacaracteres
Algunos caracteres tienen un significado especial dentro de una expresión regular y no representan simplemente su valor literal.
. ^ $ * + ?{} [ ] \ | ( )
Su significado depende de la posición y del motor utilizado. Por ejemplo, .suele
representar un carácter cualquiera dentro de determinadas condiciones, mientras que ^y
$se utilizan habitualmente como anclas.
Cuando se necesita buscar literalmente uno de estos caracteres suele ser necesario escaparlo.
COMODÍN
El punto
En muchos motores, el punto .coincide con un carácter cualquiera, aunque su relación con
los saltos de línea puede depender de las opciones del motor.
c.sa
Este patrón puede coincidir, por ejemplo, con:
casacosa
Si lo que se desea es buscar un punto literal, normalmente debe utilizarse \..
CLASES
Clases de caracteres
Los corchetes permiten definir un conjunto de caracteres posibles para una determinada posición.
[aeiou][abc][0123456789]
[aeiou]coincide con una vocal incluida en ese conjunto.
También pueden expresarse rangos:
[a-z][A-Z][0-9]
El significado exacto de los rangos y su relación con Unicode, locales o reglas de comparación depende del entorno.
CLASES
Clases negadas
En muchos motores, un ^colocado al comienzo de una clase de caracteres expresa una
negación.
[^0-9]
Este patrón representa normalmente un carácter que no pertenece al rango de los dígitos del
0al 9.
El significado de ^cambia según el contexto: dentro de una clase y al principio puede
actuar como negación, mientras que fuera de ella suele utilizarse como ancla.
ATAJOS
Clases abreviadas
Muchos motores proporcionan abreviaturas para determinadas clases de caracteres.
\d\w\s
De forma habitual:
\drepresenta caracteres considerados dígitos;\wrepresenta caracteres considerados de palabra;\srepresenta caracteres de espacio en blanco.
No debe asumirse que estas clases representan exactamente el mismo conjunto de caracteres en todos los motores. Su comportamiento puede variar especialmente cuando interviene Unicode.
REPETICIÓN
Cuantificadores
Los cuantificadores indican cuántas veces puede aparecer el elemento inmediatamente anterior.
a*a+a?a{2}a{2,4}a{2,}
De forma general:
*: cero o más repeticiones;+: una o más repeticiones;?: cero o una repetición;{2}: exactamente dos;{2,4}: entre dos y cuatro;{2,}: dos o más.
El cuantificador se aplica al elemento anterior, que puede ser un carácter, una clase o un grupo.
EJEMPLO
Repetición de dígitos
Para representar una secuencia formada por uno o más dígitos puede encontrarse un patrón como:
\d+
El elemento \drepresenta la clase correspondiente y +exige una o más
apariciones.
Para exigir exactamente cuatro posiciones:
\d{4}
La interpretación concreta de \ddebe comprobarse en la documentación del motor
utilizado.
POSICIÓN
Anclas
Las anclas representan posiciones en el texto en lugar de caracteres consumidos por la coincidencia.
^iniciofinal$
^y $representan habitualmente el inicio y el final de la entrada, aunque
determinados modos pueden modificar su comportamiento para trabajar por líneas.
Para exigir que una entrada completa esté formada únicamente por dígitos puede encontrarse:
^\d+$
AGRUPACIÓN
Grupos
Los paréntesis permiten agrupar varias partes de un patrón para tratarlas como una unidad.
(ab)+
Aquí el cuantificador se aplica al grupo completo ab, no únicamente al carácter
anterior.
En muchos motores, los paréntesis también crean grupos de captura que permiten recuperar posteriormente la parte del texto que coincidió con ese grupo.
OPCIONES
Alternativas
La barra vertical |permite expresar alternativas.
gato|perro
El patrón puede coincidir con gatoo con perro.
La agrupación permite delimitar mejor el alcance de las alternativas:
(rojo|verde|azul)
ESCAPE
Caracteres especiales y escape
Cuando un carácter tiene un significado especial dentro de la expresión regular, una barra inversa puede permitir tratarlo como literal.
\.\+\?\(
Por ejemplo:
archivo\.txt
El \.representa un punto literal. Sin el escape, .tendría normalmente un
significado especial.
Hay una dificultad adicional cuando la expresión regular se escribe dentro de otro lenguaje: puede ser necesario aplicar también las reglas de escape de la cadena del lenguaje anfitrión.
CAPTURA
Grupos de captura
Muchos motores permiten recuperar partes concretas de una coincidencia mediante grupos de captura.
(\d{4})-(\d{2})-(\d{2})
Conceptualmente, una entrada como:
2026-09-19
puede dividirse en tres grupos correspondientes a las tres partes del patrón.
La forma exacta de acceder a las capturas depende de la API o herramienta utilizada.
AGRUPACIÓN
Agrupar sin capturar
Algunos motores permiten crear grupos que modifican la estructura del patrón sin generar una captura.
(?:jpg|png|webp)
Esta construcción es común en motores modernos, pero no debe considerarse universal. Conviene comprobar su disponibilidad en el entorno utilizado.
MODOS
Flags y opciones
Los motores suelen disponer de opciones que modifican la forma en que se interpreta o ejecuta una expresión regular.
Entre los comportamientos habituales se encuentran:
- ignorar diferencias entre mayúsculas y minúsculas;
- buscar todas las coincidencias;
- modificar el comportamiento de las anclas por líneas;
- cambiar cómo actúa el punto respecto a los saltos de línea;
- activar determinadas reglas relacionadas con Unicode.
Los nombres, la sintaxis y el comportamiento de estas opciones dependen del motor y de la API utilizada.
EJEMPLO
Solo dígitos
Un patrón habitual para comprobar que toda una entrada está formada por uno o más dígitos es:
^\d+$
Sus componentes pueden interpretarse conceptualmente así:
^ inicio
\d dígito
+ una o más veces
$ final
El patrón no establece por sí mismo límites de longitud. Si el requisito exige un número concreto de caracteres, el cuantificador debe expresarlo.
EJEMPLO
Nombre básico de archivo
Un ejemplo didáctico para nombres formados por letras, números, guiones y guiones bajos, terminados
en .txt, es:
^[a-zA-Z0-9_-]+\.txt$
Puede coincidir con entradas como:
notas.txt
informe_2026.txt
tema-01.txt
No debe interpretarse como una definición general de los nombres de archivo válidos en un sistema operativo. Es únicamente un patrón con unas reglas concretas.
EJEMPLO
Código con formato fijo
Si una aplicación utiliza identificadores formados por tres letras mayúsculas, un guion y cuatro dígitos, puede expresarse:
^[A-Z]{3}-[0-9]{4}$
Ejemplos que cumplen ese formato:
ABC-2026FPE-0001
Ejemplos que no lo cumplen:
AB-2026abc-2026ABC2026
Este tipo de patrón es útil cuando el formato permitido está claramente definido.
USO
Buscar no es lo mismo que validar
Una expresión utilizada para encontrar una parte de un texto no tiene necesariamente la misma estructura que una utilizada para comprobar una entrada completa.
Por ejemplo:
\d+
puede localizar una secuencia de dígitos dentro de un texto mayor. En cambio:
^\d+$
expresa normalmente que toda la entrada debe ajustarse al patrón.
Antes de diseñar una expresión regular conviene determinar si el objetivo es buscar, extraer, sustituir o comprobar un formato.
VALIDACIÓN
Regex y validación de datos
Las expresiones regulares son útiles para comprobar determinadas propiedades sintácticas, pero una coincidencia no garantiza por sí sola que el dato sea correcto en todos los sentidos.
Un patrón puede comprobar, por ejemplo, que una entrada contiene una estructura determinada, pero no necesariamente que el valor exista, tenga sentido o cumpla todas las reglas del dominio.
Formato válido≠Dato necesariamente válido
Cuando existen reglas de negocio, comprobaciones semánticas o especificaciones complejas, deben aplicarse además de la expresión regular.
TEXTO
Unicode y caracteres internacionales
Los patrones que funcionan únicamente con rangos como [A-Z]o [a-z]no
representan necesariamente todas las letras que pueden aparecer en texto internacional.
El soporte de Unicode, las propiedades disponibles y el comportamiento de clases como
\wdependen del motor.
Cuando una aplicación debe procesar nombres, idiomas o alfabetos diversos, es importante comprobar explícitamente las capacidades Unicode del entorno en lugar de asumir que una clase ASCII es suficiente.
PORTABILIDAD
No existe una única sintaxis universal
La idea general de las expresiones regulares es compartida por muchos entornos, pero sus implementaciones no son idénticas.
Entre las diferencias posibles se encuentran:
- construcciones disponibles;
- sintaxis de grupos y referencias;
- soporte Unicode;
- flags y modos de ejecución;
- comportamiento de determinadas clases;
- funciones avanzadas;
- forma de escapar el patrón dentro del lenguaje anfitrión.
Un patrón que funciona en un entorno no debe trasladarse a otro sin comprobar antes su compatibilidad.
MANTENIBILIDAD
Legibilidad antes que complejidad
Una expresión regular muy compacta puede resultar difícil de revisar y mantener. Que sea posible expresar toda una regla en un único patrón no significa que siempre sea la solución más clara.
Para patrones complejos conviene:
- documentar qué requisito representan;
- utilizar nombres o constantes descriptivas en el código;
- probar casos válidos y no válidos;
- dividir la lógica cuando una sola expresión resulte difícil de entender;
- comprobar la sintaxis concreta del motor utilizado.
RENDIMIENTO
Patrones y coste de ejecución
El rendimiento de una expresión regular depende tanto del patrón como del motor y del texto de entrada. Determinadas combinaciones pueden provocar mucho más trabajo del esperado.
En aplicaciones que procesan grandes cantidades de texto o entradas no confiables, conviene evitar patrones innecesariamente ambiguos, establecer límites razonables y evaluar el comportamiento con casos representativos.
No existe una regla de optimización universal para todos los motores, por lo que las decisiones de rendimiento deben comprobarse en el entorno real.
ERRORES FRECUENTES
Qué conviene evitar
- olvidar que determinados caracteres tienen significado especial;
- confundir una búsqueda parcial con la validación de toda la entrada;
- utilizar
.cuando realmente se necesita un punto literal; - aplicar un cuantificador al elemento equivocado por no utilizar grupos;
- asumir que
\do\wsignifican exactamente lo mismo en todos los motores; - ignorar las reglas de escape del lenguaje que contiene la regex;
- asumir que una coincidencia sintáctica garantiza que el dato es correcto;
- crear patrones excesivamente complejos cuando una comprobación mediante código sería más clara;
- copiar una expresión de otro entorno sin comprobar su compatibilidad.
RESUMEN
Referencia rápida
. Carácter cualquiera según el modo
[abc] Uno de los caracteres indicados
[a-z] Un carácter dentro del rango
[^abc] Un carácter fuera del conjunto
\d Clase de dígitos según el motor
\w Clase de palabra según el motor
\s Espacio en blanco según el motor
* Cero o más repeticiones
+ Una o más repeticiones
? Cero o una repetición
{n} Exactamente n repeticiones
{n,m} Entre n y m repeticiones
^ Inicio según el modo
$ Final según el modo
(...) Grupo
| Alternativa
\. Punto literal
Esta tabla textual sirve como recordatorio de construcciones habituales. La documentación del motor utilizado es la referencia definitiva para conocer su sintaxis y comportamiento.
MÉTODO
Cómo construir un patrón
Una forma práctica de trabajar consiste en comenzar por el requisito más simple y añadir restricciones de forma progresiva.
Definir el formato
↓
Identificar partes variables
↓
Elegir clases y literales
↓
Añadir cuantificadores
↓
Añadir grupos o alternativas
↓
Delimitar la entrada si es necesario
↓
Probar casos válidos
↓
Probar casos no válidos
Este enfoque facilita detectar qué parte del patrón introduce un comportamiento inesperado.
SIGUE CONSULTANDO
Recursos relacionados
- Comandos Linux — incluye búsquedas de texto
con herramientas como
grep. - Códigos de estado HTTP — referencia de respuestas habituales en aplicaciones web y APIs.
- JSON: conceptos y sintaxis — estructura y representación de datos.
- Markdown: sintaxis básica — referencia para documentación técnica.
PARA AMPLIAR
Documentación de referencia
Referencias reconocidas para ampliar los conceptos de esta ficha y consultar la sintaxis concreta del motor de expresiones regulares de JavaScript.
Para otros lenguajes o herramientas debe consultarse además la documentación específica de su motor de expresiones regulares.