Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Retornar grupos de um Regex em Javascript

Entendi que é possível imprimir todos os matches e exibir também os grupos encontrados usando o trecho de código abaixo:

var target = '11a22b33c';
var pattern = /(\d\d)(\w)/g;

// Printing matches
while (result = pattern.exec(target)) {
  console.log(result);
}

O resultado impresso é:

["11a", "11", "a", index: 0, input: "11a22b33c", groups: undefined]
["22b", "22", "b", index: 3, input: "11a22b33c", groups: undefined]
["33c", "33", "c", index: 6, input: "11a22b33c", groups: undefined]

Existe uma forma elegante de extrair os grupos retornados? Eu consegui fazer isso usando algo como result.join('|||') e acessando todas as posições do array retornado, exceto a primeira, que é o match. Mas existe alguma propriedade que retorne apenas os grupos? A propriedade groups aparece vazia, o que parece incorreto já que especificamos 2 grupos na expressão regular da variável pattern.

3 respostas

Oi Giuliana,

Tente usar:

var target = '11a22b33c';
var pattern = /(\d\d)(\w)/g;

while (result = pattern.exec(target)) {
  console.log(result[0]);
  console.log(result[1]);
  console.log(result[2]);
}

Tudo bem?

abs, Nico

E se eu não souber quantos grupos existem no pattern (se ele for passado dinamicamente, por exemplo), como posso acessar todos os grupos?

solução!

Oi Giuliana,

o result é um array, então pode fazer um outro laço:

  var target = '11a22b33c';
  var pattern = /(\d\d)(\w)/g;

  while (result = pattern.exec(target)) {
    for (var i = 0; i < result.length; i++) {
        console.log(result[i]);
    }
  }

Tudo bem?

abs