W3docs

Métodos RegExp de JavaScript

Las expresiones regulares en JavaScript permiten buscar, comparar y manipular cadenas. Esta guía cubre los métodos clave de RegExp y String.

Las expresiones regulares en JavaScript son una forma poderosa de buscar, comparar y manipular cadenas. Esta guía cubre los métodos clave que se invocan sobre una expresión regular (test, exec) y sobre una cadena (search, split, match, matchAll, replace, replaceAll), con un ejemplo ejecutable y la forma real del valor de retorno de cada uno. Comprender estos métodos te permite manejar eficientemente la búsqueda de patrones en tu código.

Repaso rápido de expresiones regulares

Antes de los métodos, una orientación de un minuto para los lectores nuevos en expresiones regulares.

Un literal de expresión regular se escribe entre barras, opcionalmente seguido de flags:

/pattern/flags   // e.g. /hello/gi

También puedes construir una dinámicamente con el constructor RegExp, lo cual es útil cuando el patrón proviene de una variable (ten en cuenta que las barras invertidas deben duplicarse dentro de una cadena):

const word = "hello";
const regex = new RegExp(word, "gi"); // same as /hello/gi
const digits = new RegExp("\\d+");    // same as /\d+/

Las flags cambian el comportamiento de la búsqueda:

FlagNombreEfecto
gglobalBusca todas las coincidencias en lugar de detenerse en la primera.
iignorar mayúsculasHace que la búsqueda no distinga entre mayúsculas y minúsculas.
mmultilínea^ y $ coinciden en los saltos de línea, no solo al inicio y fin de la cadena.
sdotAllPermite que . también coincida con caracteres de nueva línea.
uunicodeTrata el patrón como una secuencia de puntos de código Unicode.
ystickyCoincide solo comenzando exactamente en lastIndex.

Para conocer la sintaxis completa de patrones y los detalles de las flags, consulta JavaScript Patterns and Flags y Capturing Groups. Muchos de los métodos que se describen a continuación también están documentados desde el lado de la cadena en JavaScript Strings.

RegExp.test()

El método test() comprueba si una cadena tiene una coincidencia con una expresión regular. Devuelve true si se encuentra una coincidencia, o false en caso contrario.

Ejemplo

javascript— editable

En este ejemplo, el método test() comprueba si la cadena "Hello world!" contiene el patrón "hello". Como el método distingue entre mayúsculas y minúsculas, devuelve false. Si añades la flag i (/hello/i), devolvería true.

RegExp.exec()

El método exec() busca en una cadena una coincidencia con una expresión regular. Devuelve un array que contiene el texto coincidente y los grupos de captura, o null si no se encuentra ninguna coincidencia. El valor devuelto no es un array simple: también incluye index (dónde comenzó la coincidencia), input (la cadena original) y groups (grupos de captura con nombre, o undefined si no los hay).

Ejemplo

javascript— editable

Aquí exec() encuentra uno o más dígitos en "The year is 2024.". El elemento 0 es la coincidencia completa, el elemento 1 es el primer grupo de captura (\d+), y las propiedades adicionales indican dónde se encontró la coincidencia.

El problema de lastIndex con /g

Cuando la expresión regular tiene la flag global (g) o sticky (y), exec() se vuelve con estado: cada llamada reanuda desde la propiedad lastIndex de la expresión regular y la avanza, devolviendo null cuando no hay más coincidencias. Llámala en un bucle para recorrer cada coincidencia, pero ten en cuenta que reutilizar la misma expresión regular con /g en llamadas no relacionadas puede dar resultados inesperados porque lastIndex se recuerda entre llamadas.

javascript— editable

Sin la flag g, exec() no tiene estado y siempre devuelve la primera coincidencia, por lo que un bucle while como este se ejecutaría indefinidamente. Para uso sin flag global, prefiere match() o matchAll().

String.search()

El método search() comprueba si una cadena tiene una coincidencia con una expresión regular. Devuelve el índice basado en cero de la primera coincidencia, o -1 si no se encuentra ninguna.

Ejemplo

javascript— editable

En este ejemplo, el método search() devuelve el índice de la primera aparición de "awesome" en la cadena, que es 14.

String.split()

El método split() divide una cadena en una lista ordenada de subcadenas y las devuelve en un array. Es un método de cadena de propósito general: el separador puede ser una cadena simple (str.split(",")) o una expresión regular. La forma con expresión regular es solo un caso de uso, práctico cuando el delimitador varía; por ejemplo, dividir por uno o más caracteres de espacio en blanco.

Ejemplo

javascript— editable

La primera llamada divide por una coma literal; la segunda usa la expresión regular /\s+/ para dividir por cualquier secuencia de espacios en blanco, de modo que múltiples espacios y tabulaciones se convierten en separadores limpios.

String.match()

El método match() obtiene el resultado de comparar una cadena con una expresión regular. Su valor de retorno depende de las flags:

  • Con /g: un array de todas las subcadenas coincidentes (sin index ni groups), o null si no hay coincidencias.
  • Sin /g: el mismo array enriquecido que devuelve exec() — la primera coincidencia más los grupos de captura, con index, input y groups — o null si no hay coincidencia.

Como match() devuelve null en lugar de un array vacío cuando no hay coincidencias, comprueba siempre el resultado antes de usarlo.

Ejemplo

javascript— editable

Con la flag global, match() devuelve todas las apariciones de "ain"; un patrón que no coincide devuelve null, no un array vacío.

String.matchAll()

El método matchAll() devuelve un iterador de todas las coincidencias, incluidos los grupos de captura. Cada elemento que produce es un array de coincidencia completo (un RegExpMatchArray), con la misma estructura que produce exec(), por lo que cada coincidencia incluye index, input y groups, no solo las cadenas coincidentes. La expresión regular debe tener la flag g, o matchAll() lanza un TypeError. A diferencia de exec() en un bucle, matchAll() no deja un lastIndex residual en tu expresión regular, lo que lo convierte en la opción más limpia para iterar sobre todas las coincidencias. (Requiere ES2020+.)

Ejemplo

javascript— editable

Como los elementos son arrays de coincidencia reales, puedes leer match.index y los grupos capturados (match[1], match[2], …) para cada resultado. Convierte el iterador a un array con Array.from(str.matchAll(regex)) o el operador de propagación cuando necesites indexar los resultados.

String.replace()

El método replace() devuelve una nueva cadena con las coincidencias del patrón reemplazadas (la cadena original nunca se muta). Con una cadena simple o una expresión regular sin /g reemplaza solo la primera coincidencia; añade la flag g para reemplazar todas.

La cadena de reemplazo admite tokens especiales: $& es la coincidencia completa, $` y $' son el texto antes/después de ella, $n inserta el enésimo grupo de captura, y $<name> inserta un grupo con nombre.

Ejemplo

javascript— editable

También puedes pasar una función como reemplazo; recibe la coincidencia y los grupos capturados como argumentos y devuelve el texto de reemplazo, lo cual es muy útil para valores calculados:

javascript— editable

String.replaceAll()

El método replaceAll() reemplaza todas las apariciones y devuelve una nueva cadena. Cuando le pasas una expresión regular, esta debe tener la flag g o lanzará un TypeError, lo que protege contra el error común de esperar que replace() sea global. Admite los mismos tokens de reemplazo $1 / $<name> y funciones de reemplazo que replace(). (Requiere ES2021+.)

Ejemplo

javascript— editable

Usa replaceAll() con una cadena simple cuando simplemente quieras reemplazar todas las copias de una subcadena literal; utiliza la forma con expresión regular cuando el objetivo es un patrón.

Conclusión

Esta guía cubrió los métodos principales usados con expresiones regulares en JavaScript — test y exec en el lado de la expresión regular, y search, split, match, matchAll, replace y replaceAll en el lado de la cadena — junto con sus formas reales de valor de retorno y el comportamiento con estado de lastIndex con la flag /g. Para profundizar en los patrones, continúa con Patterns and Flags, Capturing Groups y la flag sticky y.

Práctica

Práctica
¿Cuáles de las siguientes afirmaciones sobre las expresiones regulares de JavaScript son verdaderas?
¿Cuáles de las siguientes afirmaciones sobre las expresiones regulares de JavaScript son verdaderas?
Was this page helpful?