"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment capturer plusieurs groupes dans une expression régulière JavaScript répétée ?

Comment capturer plusieurs groupes dans une expression régulière JavaScript répétée ?

Publié le 2024-11-26
Parcourir:122

How to Capture Multiple Groups in a Repeated JavaScript Regex?

Capture de groupes arbitraires dans une expression régulière JavaScript

Lors de l'utilisation de la capture de groupes dans des expressions régulières JavaScript, il est essentiel d'en comprendre les limites. Par défaut, seule la dernière capture d'un groupe répété est conservée, même si le groupe est imbriqué.

Exemple : Groupe de capture imbriqué

Considérez l'expression régulière suivante :

/^(\s*\w ) $/

Sortie attendue :

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

Sortie réelle :

["foo bar baz", " baz"]

Dans ce cas, seul le le dernier groupe capturé, "baz", est restitué. En effet, JavaScript ne conserve que la capture finale pour chaque groupe répété.

Options de capture de plusieurs groupes

Pour surmonter cette limitation, plusieurs options sont disponibles :

  • Diviser sur les délimiteurs : Si possible, utilisez le fractionnement de chaînes pour séparer les segments souhaités.
  • Exec Boucle et fractionnement : Utilisez une boucle d'exécution pour faire correspondre à plusieurs reprises le modèle dans une chaîne et diviser le groupe capturé en correspondances individuelles.
  • Correspondance à plusieurs niveaux : Capturez le groupe répété en une seule correspondance. puis utilisez une autre expression régulière pour extraire les segments individuels.

Exemple : Exec Loop et Fractionnement

Voici un exemple utilisant une boucle d'exécution pour capturer et diviser un groupe imbriqué :

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"]

Dans cet exemple, le groupe imbriqué est capturé en tant que groupe 1, qui est ensuite divisé par le délimiteur point-virgule.

Questions connexes

  • Comment accéder aux groupes correspondants dans une expression régulière JavaScript ?
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3