Maison >interface Web >js tutoriel >Comment capturer plusieurs occurrences d'un groupe dans JavaScript Regex ?

Comment capturer plusieurs occurrences d'un groupe dans JavaScript Regex ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-11 03:16:03458parcourir

How to Capture Multiple Occurrences of a Group in JavaScript Regex?

Capturer des groupes arbitraires dans JavaScript Regex

Lors de l'utilisation d'expressions régulières pour capturer des groupes, il est important de comprendre les limitations imposées par certains modèles. Bien que des groupes de capture répétés puissent être utilisés pour faire correspondre plusieurs occurrences, seule la dernière capture est conservée en JavaScript.

Considérons l'exemple suivant :

"foo bar baz".match(/^(\s*\w+)+$/)

Dans ce modèle, le groupe de capture (s *w ) est répété en utilisant le quantificateur. Cependant, le moteur d'expression régulière de JavaScript capture uniquement la dernière occurrence, pas les correspondances intermédiaires. En conséquence, le résultat est :

["foo bar baz", " baz"]

Pour récupérer toutes les correspondances capturées, envisagez les stratégies suivantes :

Diviser sur les délimiteurs :
Si possible, divisez la chaîne sur des délimiteurs prédéfinis plutôt que d'utiliser une expression régulière complexe.

Boucle d'exécution avec des groupes répétés :
Créez un modèle qui capture le groupe répété, puis utilisez une boucle d'exécution pour parcourir les matchs. Une fois le groupe complet capturé, divisez-le sur le délimiteur intérieur.

Correspondance à plusieurs niveaux :
Décomposez le problème en plusieurs étapes en capturant le groupe répété en un seul modèle, puis en utilisant un modèle ultérieur pour extraire des correspondances individuelles.

Exemple :

Pour faire correspondre et diviser la chaîne , utilisez le modèle suivant :

/<(\w+(;\w+)*)>/g

Ce modèle capture l'intégralité du groupe répété dans le groupe 1. Ensuite, dans la boucle d'exécution, divisez la chaîne capturée à l'aide du ; délimiteur.

var text = "a;b;;g;h;i;;j;k;";

var r = /<(\w+(;\w+)*)>/g;

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

Sortie :

["c", "d", "e", "f"]
["xx", "yy", "zz"]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn