"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como capturar vários grupos em um Regex JavaScript repetido?

Como capturar vários grupos em um Regex JavaScript repetido?

Publicado em 2024-11-26
Navegar:370

How to Capture Multiple Groups in a Repeated JavaScript Regex?

Captura de grupos arbitrários em JavaScript Regexp

Ao usar a captura de grupos em expressões regulares JavaScript, é essencial entender as limitações. Por padrão, apenas a última captura de um grupo repetido é mantida, mesmo que o grupo esteja aninhado.

Exemplo: grupo de captura aninhado

Considere a seguinte expressão regular:

/^(\s*\w ) $/

Saída esperada:

["foo bar baz", "foo", " bar", " baz"]

Saída real:

["foo bar baz", " baz"]

Neste caso, apenas o o último grupo capturado, "baz", é devolvido. Isso ocorre porque o JavaScript retém apenas a captura final de cada grupo repetido.

Opções para capturar vários grupos

Para superar essa limitação, diversas opções estão disponíveis:

  • Dividir em delimitadores: Se possível, use a divisão de strings para separar os segmentos desejados.
  • Exec Loop e divisão: Use um loop exec para combinar repetidamente o padrão dentro de uma string e dividir o grupo capturado em correspondências individuais.
  • Correspondência multinível: Capture o grupo repetido em uma correspondência e, em seguida, use outro regex para extrair os segmentos individuais.

Exemplo: Exec Loop e Divisão

Aqui está um exemplo usando um loop exec para capturar e dividir um grupo aninhado:

var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>";
var r = /<(\w (;\w )*)>/g;
var match;

while ((match = r.exec(text)) != null) {
  print(match[1].split(";"));
}

// Output:
// ["c", "d", "e", "f"]
// ["xx", "yy", "zz"]

Neste exemplo, o grupo aninhado é capturado como grupo 1, que é então dividido no delimitador de ponto e vírgula.

Perguntas relacionadas

  • Como você acessa os grupos correspondentes em um regex JavaScript?
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3