W3docs

Groupes capturants

Apprenez les groupes capturants en JavaScript : groupes numérotés, nommés (?<nom>), non-capturants (?:), et leur utilisation avec match, matchAll et replace ($1, $<nom>).

Un groupe capturant est une partie d'une expression régulière entourée de parenthèses (...). Il remplit deux fonctions : il regroupe un fragment du motif pour que les quantificateurs et l'alternance s'appliquent à l'ensemble, et il mémorise le texte qui a correspondu afin que vous puissiez le relire ensuite.

C'est ce qui transforme une expression régulière d'un simple test oui/non en un outil d'extraction de données. Au lieu de savoir seulement qu'une date a correspondu, vous pouvez extraire l'année, le mois et le jour comme pièces distinctes. Cette page couvre les groupes numérotés, les groupes nommés, les groupes non-capturants, et le comportement des groupes avec match, matchAll et replace.

Comprendre les groupes capturants

Lorsqu'une correspondance est trouvée, la correspondance complète est stockée à l'index 0 du tableau résultat, et chaque groupe capturant est stocké aux index suivants (1, 2, 3, …) dans l'ordre d'apparition des parenthèses ouvrantes, de gauche à droite.

Syntaxe et utilisation de base

Voici un exemple simple :

javascript— editable

match[0] est toujours la chaîne entière correspondante. match[1] et match[2] contiennent le texte capturé par le premier et le deuxième jeu de parenthèses. Les groupes sont numérotés par leur ( ouvrante, de sorte que même les groupes imbriqués ont un ordre prévisible (voir ci-dessous).

Utilisation avancée et techniques

Groupes capturants imbriqués

Les groupes peuvent être imbriqués, permettant des correspondances de motifs plus complexes. La numérotation suit chaque parenthèse ouvrante de gauche à droite :

javascript— editable

Le groupe externe (groupe 1) capture foobar, tandis que les groupes internes (2 et 3) capturent foo et bar séparément. Si un groupe est optionnel et ne participe pas à la correspondance, son emplacement vaut undefined.

Groupes non-capturants

Parfois, vous souhaitez regrouper des parties d'un motif — pour appliquer un quantificateur ou une alternance — sans utiliser un emplacement numéroté. Les groupes non-capturants utilisent (?:...) :

javascript— editable

Ici, foo est regroupé mais non capturé, donc bar devient le groupe 1 au lieu du groupe 2. Les groupes non-capturants gardent votre tableau résultat propre et sont légèrement plus rapides lorsque vous n'avez pas besoin du texte correspondant.

Un usage courant est de répéter un fragment sans capturer chaque répétition :

javascript— editable

Exemples pratiques

Analyser des dates

Les groupes capturants peuvent analyser et reformater des dates issues de chaînes :

javascript— editable

Ce code extrait l'année, le mois et le jour, puis formate la date dans un style différent.

Extraire des informations depuis des URL

Un autre cas d'usage courant est l'extraction de parties d'une URL :

javascript— editable

Cette expression régulière capture séparément le protocole, le domaine, le chemin et la chaîne de requête.

Conseils pour utiliser efficacement les groupes capturants

  1. Planifiez vos groupes : Réfléchissez à l'avance aux parties du motif que vous devez capturer.
  2. Utilisez les groupes non-capturants si nécessaire : Utilisez (?:...) pour regrouper sans capturer, afin de simplifier votre tableau de correspondances.
  3. Groupes capturants nommés : En JavaScript moderne (ES2018+), vous pouvez utiliser des groupes capturants nommés pour une meilleure lisibilité.
  4. Comportement avec le drapeau global : Lorsque vous utilisez le drapeau g avec String.prototype.match(), celui-ci renvoie un tableau de toutes les chaînes correspondantes au lieu des groupes capturants. Utilisez String.prototype.matchAll() pour une extraction détaillée des groupes avec le drapeau global.

Groupes capturants nommés

Les groupes numérotés sont fragiles : ajoutez un groupe au milieu et chaque index qui suit se décale. Les groupes capturants nommés (ES2018+) évitent cela en étiquetant chaque groupe avec (?<nom>...). Les captures apparaissent sur un objet groups au lieu de (ou en plus des) index numérotés :

javascript— editable
Info

Préférez les groupes capturants nommés pour tout motif non trivial — ils rendent à la fois l'expression régulière et le code qui la lit auto-documentés.

Utiliser les groupes avec match, matchAll et replace

La manière de lire les groupes capturés dépend de la méthode que vous appelez.

Sans le drapeau gmatch renvoie les groupes

Un String.prototype.match() non global renvoie un seul tableau de correspondance avec tous les groupes, exactement comme dans les exemples ci-dessus. C'est la façon la plus courante d'extraire un seul enregistrement.

Avec le drapeau g — utilisez matchAll pour les groupes

Lorsque vous ajoutez le drapeau global g, match() ne renvoie qu'un tableau plat de chaînes de correspondance complètes — les groupes sont perdus. Pour obtenir les groupes de chaque correspondance, utilisez String.prototype.matchAll(), qui renvoie un itérateur de tableaux de correspondance (chacun avec son propre objet groups) :

javascript— editable

Référencer les groupes dans replace

Dans une chaîne de remplacement String.prototype.replace(), vous pouvez référencer les captures par numéro avec $1, $2, … ou par nom avec $<nom> :

javascript— editable

Pour plus de contrôle, passez une fonction à replace. Ses arguments sont la correspondance complète, puis chaque groupe capturé, et (si vous avez utilisé des noms) un objet groups final :

javascript— editable

Références arrière

Une fois qu'un groupe a capturé du texte, vous pouvez retrouver ce même texte plus loin dans le même motif grâce à une référence arrière\\1 pour les groupes numérotés ou \\k<nom> pour les groupes nommés. C'est utile pour trouver des mots répétés ou faire correspondre des guillemets appariés :

javascript— editable

Les références arrière constituent un sujet à part entière — voir Références arrière dans un motif pour tous les détails.

Sujets connexes

Conclusion

Les groupes capturants dans les expressions régulières JavaScript offrent une manière robuste de travailler avec des motifs de chaînes complexes. En maîtrisant leur utilisation, vous pouvez effectuer des manipulations de texte sophistiquées, extraire des données significatives et gérer les remplacements avec facilité. Que vous analysiez des dates, traitiez des URL ou reformatiez des chaînes, les groupes capturants fournissent la flexibilité et la puissance nécessaires pour les tâches avancées de traitement de texte. Explorez ces exemples, entraînez-vous avec vos propres motifs, et développez vos compétences JavaScript pour relever tout défi de manipulation de chaînes.

Pratique

Pratique
Lesquelles des affirmations suivantes sur les groupes capturants dans les expressions régulières JavaScript sont vraies ?
Lesquelles des affirmations suivantes sur les groupes capturants dans les expressions régulières JavaScript sont vraies ?
Was this page helpful?