Maison > interface Web > js tutoriel > Comment capturer plusieurs groupes dans une expression rationnelle JavaScript lorsque la répétition ne conserve que la dernière correspondance ?

Comment capturer plusieurs groupes dans une expression rationnelle JavaScript lorsque la répétition ne conserve que la dernière correspondance ?

DDD
Libérer: 2024-11-16 22:40:03
original
767 Les gens l'ont consulté

How can you capture multiple groups in a JavaScript regexp when the repetition only keeps the last match?

Capturer plusieurs groupes dans JavaScript Regexp

Lorsque vous travaillez avec des expressions régulières en JavaScript, il est possible de capturer plusieurs groupes de correspondances dans une chaîne . Cependant, il existe des limites au nombre de groupes qui peuvent être capturés et récupérés.

Considérez l'expression rationnelle JavaScript suivante :

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

On pourrait s'attendre à ce que cette expression rationnelle renvoie un tableau contenant l'intégralité de chaîne "foo bar baz" ainsi que chaque mot individuel :

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

Cependant, l'expression rationnelle renvoie en fait uniquement la dernière correspondance capturée :

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

Ce comportement se produit car, dans la plupart Avec les saveurs d'expression rationnelle, seule la dernière capture d'un groupe de capture répété est conservée. En JavaScript, la répétition d'un groupe de capture permet uniquement de capturer exactement le nombre spécifié de chaînes par correspondance.

Pour surmonter cette limitation, il existe plusieurs options :

  • Fractionnement sur les délimiteurs : Si possible, envisagez de diviser la chaîne sur le délimiteur approprié au lieu d'utiliser une expression rationnelle avec des groupes de capture répétés.
  • Utilisation d'une boucle d'exécution globale : Faites correspondre le groupe répété en une seule correspondance en utilisant l'indicateur /pattern/g, puis traitez les résultats à l'aide d'une boucle d'exécution. Notez que cette méthode n'est pas entièrement équivalente à un groupe de capture répétée.
  • Correspondance à plusieurs niveaux : Capturez le groupe répété en une seule correspondance, puis utilisez une deuxième expression rationnelle pour séparer cette correspondance.

Exemple :

Pour faire correspondre la chaîne dans un texte utilisant la correspondance à plusieurs niveaux :

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

Cette approche utilise deux niveaux de correspondance pour extraire des mots individuels de la chaîne.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal