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
Libérer: 2024-11-11 03:16:03
original
452 Les gens l'ont consulté

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+)+$/)
Copier après la connexion

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"]
Copier après la connexion

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
Copier après la connexion

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(";"));
}
Copier après la connexion

Sortie :

["c", "d", "e", "f"]
["xx", "yy", "zz"]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal