Maison > interface Web > js tutoriel > le corps du texte

Pourquoi JavaScript Regex capture-t-il uniquement le dernier groupe d'une répétition ?

Mary-Kate Olsen
Libérer: 2024-11-11 04:12:02
original
233 Les gens l'ont consulté

Why Does JavaScript Regex Capture Only the Last Group in a Repetition?

Capturer plusieurs groupes dans des expressions régulières JavaScript

Lorsque vous travaillez avec des expressions régulières en JavaScript, il est courant de rencontrer des situations dans lesquelles vous devez capturer plusieurs groupes de données. Cependant, dans certains cas, le comportement attendu de capture de tous les groupes correspondants peut ne pas être obtenu.

Par exemple, considérons le code JavaScript suivant :

"foo bar baz".match(/^(\s*\w+)+$/)
Copier après la connexion

Vous pouvez vous attendre à ce que le code renvoie un tableau contenant toutes les correspondances capturées :

["foo bar baz", "foo", " bar", " baz"]
Copier après la connexion

Cependant, le résultat réel est :

["foo bar baz", " baz"]
Copier après la connexion

Cela se produit car en mode régulier expressions, lorsque vous répétez un groupe de capture, seule la dernière capture est conservée. Il s'agit du comportement par défaut dans la plupart des versions d'expression régulière.

Solutions de contournement pour capturer toutes les correspondances

Si vous devez capturer tous les groupes correspondants, quelques options sont disponibles :

  • Diviser sur les délimiteurs : Si le motif que vous essayez de faire correspondre contient des délimiteurs, pensez à utiliser la méthode split au lieu d'une expression régulière. Cette approche peut être utilisée pour diviser la chaîne d'entrée en un tableau de chaînes.
  • Correspondance à l'aide d'une boucle : Vous pouvez utiliser une boucle pour appliquer à plusieurs reprises l'expression régulière à la chaîne d'entrée à l'aide du méthode d'exécution. Cette méthode renvoie un tableau contenant tous les groupes capturés pour chaque correspondance.
  • Correspondance à plusieurs niveaux : Une autre approche consiste à capturer le groupe répété dans une correspondance, puis à utiliser une deuxième expression régulière pour rompre cela match apart.

Exemple d'utilisation d'une boucle d'exécution

L'exemple suivant montre la correspondance de plusieurs groupes à l'aide d'une boucle d'exécution :

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) {
  console.log(match[1].split(";"));
}
// [ 'c', 'd', 'e', 'f' ]
// [ 'xx', 'yy', 'zz' ]
Copier après la connexion

Ressources supplémentaires

  • regular-expressions.info/Répéter un groupe de capture vs capturer un groupe répétitif
  • Comment accéder aux groupes correspondants dans une regex javascript ?

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