Expresiones regulares en JavaScript | Nicolás Garzón
Una expresión regular describe un patrón para buscar, extraer, dividir o reemplazar texto.
JavaScript
Copiar const pattern = / \d + / ;
pattern. test ( "Order 42" ) ; JavaScript
Copiar const digits = / \d + / g ; JavaScript
Copiar const digits = new RegExp ( "\\d+" , "g" ) ; El constructor es útil cuando el patrón se construye dinámicamente, pero exige escapar también el string de JavaScript.
JavaScript
Copiar const pattern = / product / i ;
pattern. test ( "Product list" ) ; exec devuelve información de la coincidencia:
JavaScript
Copiar const match = / ( \w + ) @( \w + \. \w + ) / . exec (
"user@example.com" ,
) ; Puede incluir texto completo, grupos, índice, entrada y grupos nombrados.
JavaScript
Copiar text. match ( pattern) ;
text. matchAll ( pattern) ;
text. search ( pattern) ;
text. replace ( pattern, replacement) ;
text. replaceAll ( pattern, replacement) ;
text. split ( pattern) ; La elección depende de si necesitas una coincidencia, todas, posición, reemplazo o separación.
Texto
Copiar \d dígito
\w carácter de palabra según la definición de RegExp
\s espacio
. casi cualquier carácterTexto
Copiar * cero o más
+ uno o más
? cero o uno
{n} exactamente n
{n,m} entre n y mJavaScript
Copiar / ^ product$ / ; Sin anclas, el patrón puede coincidir dentro de un texto mayor.
JavaScript
Copiar / \d + / . test ( "abc123" ) ;
/ ^ \d+ $/ . test ( "abc123" ) ; JavaScript
Copiar const pattern = / ( \d {4} ) -( \d {2} ) -( \d {2} ) / ; JavaScript
Copiar const pattern = / (?<year > \d {4} ) -(?<month > \d {2} ) -(?<day > \d {2} ) / ;
const match = pattern. exec ( "2026-07-23" ) ;
match. groups. year; JavaScript
Copiar / (?: http| https) :\/ \/ / ; Agrupan sin añadir una captura numérica.
JavaScript
Copiar / cat| dog / ; Los paréntesis aclaran el alcance:
JavaScript
Copiar / ^ ( cat| dog) $ / ; JavaScript
Copiar / \d + (?= USD) / ;
/ (?<= USD ) \d + / ; Comprueban contexto sin incluirlo en la coincidencia. El soporte de lookbehind requiere runtimes modernos.
Texto
Copiar g global
i ignore case
m multiline
s dotAll
u Unicode
v Unicode sets moderno
y sticky
d índices de gruposNo memorices solo las letras; entiende qué regla cambia cada una.
Una RegExp global o sticky conserva lastIndex.
JavaScript
Copiar const pattern = / \d / g ;
pattern. test ( "1" ) ;
pattern. test ( "1" ) ; La segunda llamada comienza desde el índice guardado.
Para tests independientes, evita compartir una RegExp stateful o reinicia lastIndex.
JavaScript
Copiar const matches = text. matchAll (
/ (?<name > \w + ) :(?<value > \d + ) / g ,
) ;
for ( const match of matches) {
console. log ( match. groups) ;
} Retorna un iterador y preserva información de cada coincidencia.
JavaScript
Copiar const result = text. replace (
/ \b \w + \b / g ,
( word ) => word. toUpperCase ( ) ,
) ; La callback puede usar coincidencia, capturas, índice y texto original.
JavaScript
Copiar new RegExp ( userInput) ; Caracteres como ., *, [ o ( cambian el patrón.
JavaScript
Copiar const safe = RegExp. escape ( userInput) ;
const pattern = new RegExp ( safe, "i" ) ; Comprueba compatibilidad antes de usar una API reciente.
JavaScript
Copiar / \p{Letter} + / u ; Las Unicode property escapes permiten categorías más amplias que \w, cuya definición no representa todos los alfabetos humanos.
Con el flag v pueden expresarse operaciones de conjuntos y propiedades de strings Unicode más avanzadas.
* es greedy y consume lo máximo posible.
*? es lazy y consume lo mínimo que permite una coincidencia.
Ninguno convierte una RegExp en parser HTML confiable.
Patrones con alternativas y cuantificadores ambiguos pueden probar muchas rutas.
JavaScript
Copiar / ^ ( a+ ) + $ / ; Ante entradas adversarias puede producir tiempo excesivo. Este riesgo se conoce como ReDoS cuando una RegExp vulnerable se usa con texto controlado por un atacante.
Cuantificadores anidados ambiguos.
Alternativas que coinciden con prefijos similares.
Patrones sin límites sobre entradas enormes.
Una RegExp puede validar la forma, no siempre el significado.
JavaScript
Copiar / ^ \d {4} -\d {2} -\d {2} $ / ; Acepta 2026-99-99. Después debes validar calendario y reglas del dominio.
JavaScript
Copiar function extractVariables ( template ) {
return [
... template. matchAll (
/ \{ \{ \s * (?<name > [ a- z A- Z _$] [ \w $] * ) \s * \} \} / g ,
) ,
] . map ( ( match ) => match. groups. name) ;
} El patrón reconoce una sintaxis pequeña y controlada.
Usar RegExp como parser universal.
Olvidar anclas en validaciones completas.
Compartir una RegExp global sin considerar lastIndex.
Insertar entrada dinámica sin escapar.
Confundir forma válida con dato válido.
Utilizar \w esperando todos los alfabetos.
Crear patrones vulnerables a backtracking excesivo.
Añadir grupos capturantes cuando no se necesitan.
Ignorar flags y compatibilidad.
Una RegExp describe patrones de texto.
test responde booleano; exec devuelve detalle.
String ofrece APIs para búsqueda y transformación.
Los flags cambian el comportamiento.
g y y mantienen lastIndex.
Las capturas nombradas mejoran legibilidad.
La entrada dinámica necesita escaping.
Una RegExp valida forma, no necesariamente significado.
El diseño del patrón también afecta seguridad y rendimiento.
¿Por qué /^\d{4}-\d{2}-\d{2}$/ no basta para validar una fecha real?
Respuesta Porque solo comprueba la forma numérica. No conoce la cantidad de días de cada mes, años bisiestos ni otros límites del calendario.
Symbols explica claves únicas, protocolos internos y personalización del comportamiento de objetos.