Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Objetos globales
  5. String — Cadena de caracteres
  6. String.prototype.matchAll()

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

String.prototype.matchAll()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since enero de 2020.

El métodomatchAll() retorna un iterador de todos los resultados de ocurrencia en unacadena de texto contra una expresión regular, incluyendo grupos de captura.

Pruébalo

const regexp = /t(e)(st(\d?))/g;const str = "test1test2";const array = [...str.matchAll(regexp)];console.log(array[0]);// Expected output: Array ["test1", "e", "st1", "1"]console.log(array[1]);// Expected output: Array ["test2", "e", "st2", "2"]

Sintaxis

cadena.matchAll(expresionRegular)

Parámetros

expresionRegular

Un objeto expresión regular. Si se pasa un objeto no-RegExpobj, este es implícitamente convertido aRegExp víanew RegExp(obj).

Valor devuelto

Uniterador (el cual no es reiniciable).

Ejemplo

Regexp.exec() y matchAll()

Antes de la adición dematchAll a JavaScript, fue posible hacer llamados aregexp.exec (y usar expresiones regulares con la bandera/g) en un ciclo para obtener las ocurrencias:

js
const regexp = RegExp("foo[a-z]*", "g");const cadena = "mesa football, foosball";let ocurrencia;while ((ocurrencia = regexp.exec(cadena)) !== null) {  console.log(    `Encontrado ${ocurrencia[0]} inicio=${ocurrencia.index} final=${regexp.lastIndex}.`,  );  // salida esperada: "Encontrado football inicio=5 final=13."  // salida esperada: "Encontrado foosball inicio=15 final=23."}

ConmatchAll disponible, puedes evitar el ciclowhile yexec con/g. Por el contrario, usandomatchAll, obtienes un iterador con el cual puedes usar con constructores más convenientesfor...of,array spread, oArray.from():

js
const regexp = RegExp("foo[a-z]*", "g");const cadena = "mesa football, foosball";const ocurrencias = cadena.matchAll(regexp);for (const ocurrencia of ocurrencias) {  console.log(    `Encontrado ${ocurrencia[0]} inicio=${ocurrencia.index} final=${      ocurrencia.index + ocurrencia[0].length    }.`,  );}// salida esperada: "Encontrado football start=5 end=13."// salida esperada: "Encontrado foosball start=15 end=23."// el iterador ocurrencias es agotado después de la iteración for..of// Llama matchAll de nuevo para crear un nuevo iteradorArray.from(cadena.matchAll(regexp), (m) => m[0]);// Array [ "football", "foosball" ]

matchAll solo devuelve la primer ocurrencia si la bandera/g está ausente.

js
const regexp = RegExp("[a-c]", "");const cadena = "abc";Array.from(cadena.matchAll(regexp), (m) => m[0]);// Array [ "a" ]

matchAll internamente hace un clon de la expresión regular, entonces a diferencia deregexp.exec,lastIndex no cambia a medida que la cadena es escaneada.

js
const regexp = RegExp("[a-c]", "g");regexp.lastIndex = 1;const cadena = "abc";Array.from(cadena.matchAll(regexp), (m) => `${regexp.lastIndex} ${m[0]}`);// Array [ "1 b", "1 c" ]

Mejor acceso para capturar grupos

Otra buena razón paramatchAll es el mejorado acceso a los grupos de captura. Los grupos de captura son ignorados cuando se usamatch() con la bandera global/g:

js
var regexp = /t(e)(st(\d?))/g;var cadena = "test1test2";cadena.match(regexp);// Array ['test1', 'test2']

ConmatchAll puedes acceder a ellos:

js
let array = [...str.matchAll(regexp)];array[0];// ['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]array[1];// ['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4]

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-string.prototype.matchall

Compatibilidad con navegadores

Ver también

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2026 Movatter.jp