Eu escrevi um artigo sobre como começar com expressões regulares antes. Eu pensei que estava relativamente familiarizado com expressões regulares, mas hoje encontrei outra armadilha. Talvez tenha sido porque eu não tive cuidado o suficiente. Hoje vou me concentrar em compartilhar com você o agrupamento em expressões regulares de JavaScript. Se você não entende expressões regulares do JS o suficiente, clique aqui para saber mais.
O agrupamento é amplamente utilizado em regras regulares. O agrupamento que eu entendo é um par de colchetes (), e cada par de colchetes representa um grupo.
Agrupamento pode ser dividido em:
A captura de agrupamento obterá os resultados do agrupamento correspondente na forma de um segundo termo e um terceiro termo em uma função como o Match Exec. Vamos dar uma olhada em um exemplo primeiro
var reg =/teste (/d+)/; var str = 'new test001 test002'; console.log (str.match (reg)); // ["test001", "001", índice: 4, entrada: "new test001 test002"]
No Código (/D+) é um grupo (algumas pessoas também o chamam de subdattern), mas todas representam o mesmo significado. No exemplo acima, o Test001 é o resultado da correspondência exata.
No entanto, a correspondência do grupo é encontrar caracteres que correspondam ao sub-padrão/D+ de todo o resultado exato da correspondência (ou seja, TEST001). Aqui é obviamente 001.
Mas é isso que encontrei hoje
var reg =/teste (/d)+/; var str = 'new test001 test002'; console.log (str.match (reg)); // ["test001", "1", índice: 4, entrada: "new test001 test002"]
A diferença é que (/d+) é alterado para (/d)+, e todo o resultado correspondente ainda é Test001, mas o resultado da correspondência do primeiro grupo é diferente.
Vamos dar uma olhada em suas diferenças
(/d+) Esta é uma situação de agrupamento, porque, por padrão, os padrões correspondentes são padrões gananciosos, ou seja, o maior número possível de correspondências
O resultado de todas as correspondências /d+ é 001. Em seguida, um par de colchetes é adicionado fora, o que significa um grupo; portanto, o resultado da correspondência no primeiro grupo é 001.
Vejamos (/d)+ no segundo exemplo. Este também é um padrão ganancioso. Primeiro, ele corresponderá primeiro 0 e depois 0 e também corresponderá ao final de 1.
Parece que não há diferença em relação à partida no primeiro exemplo, mas o agrupamento (/d) aqui significa corresponder a um único número.
De acordo com o meu entendimento anterior, o resultado de que a partida foi 0 no início foi 0, mas esse entendimento está errado. Como toda a partida é um padrão ganancioso, combine o máximo possível
(/d) No grupo, capturará o último resultado correspondente 1
Se for um padrão não-greedoso, ele corresponderá o mínimo possível
var reg =/teste (/d)+?/; var str = 'new test001 test002'; console.log (str.match (reg)); // ["test001", "0", índice: 4, entrada: "new test001 test002"]
Dessa forma, o resultado correspondente (/d) é 0. Embora ainda haja resultados que possam ser correspondidos mais tarde, aqui está para corresponder o máximo possível
Agrupamento não capturado
var reg =/teste (?:/d)+/; var str = 'new test001 test002'; console.log (str.match (reg)); // ["test001", índice: 4, entrada: "new test001 test002"]
O agrupamento não capturado significa que um par de colchetes é necessário em alguns lugares, mas eles não querem que seja um agrupamento de captura, o que significa que eles não querem que esse grupo seja obtido por funções como o MacTh Exec.
Geralmente, acrescentando?: (?: Padrão) dentro do suporte se torna um grupo não-captura.
Dessa forma, não haverá correspondência de conteúdo no resultado da partida da partida, o que significa que o segundo item está faltando.
Este artigo se concentra em explicar a diferença entre (/d+) e (/d)+, que também é o poço em que pisei hoje. Se houver algum erro, sinta -se à vontade para corrigi -los.