| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Regular_expressions/Capturing_group | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
Un groupe capturant (capturing group en anglais) regroupe un sous-modle, vous permettant d'appliquer un quantificateur l'ensemble du groupe ou d'utiliser des disjonctions l'intrieur. Il mmorise les informations sur la correspondance du sous-modle, afin que vous puissiez y faire rfrence plus tard avec une rtro-rfrence, ou accder aux informations avec les rsultats de correspondance.
Si vous n'avez pas besoin du rsultat de la correspondance du sous-modle, utilisez plutt un groupe non capturant, ce qui amliore les performances et vite les risques de re-factorisation.
(pattern)
patternUn motif consistant en tout ce que vous pouvez utiliser dans un littral regex, y compris une disjonction.
Un groupe capturant agit comme l'oprateur de regroupement dans les expressions JavaScript, vous permettant d'utiliser un sous-modle comme un seul atome.
Les groupes capturant sont numrots dans l'ordre de leurs parenthses ouvrantes. Le premier groupe capturant porte le numro 1, le deuxime 2, et ainsi de suite. Les groupes capturant nomms sont galement des groupes capturant et sont numrots avec les autres groupes capturant (non nomms). Vous pouvez accder aux informations sur la correspondance du groupe capturant :
RegExp.prototype.exec(), String.prototype.match() et String.prototype.matchAll()pN de la fonction de rappel de remplacement des mthodes String.prototype.replace() et String.prototype.replaceAll()Note :
Mme dans le tableau rsultat de exec(), vous accdez aux groupes capturant par les numros 1, 2, etc., car l'lment 0 correspond la correspondance entire. \0 n'est pas une rtro-rfrence, mais une squence d'chappement de caractre pour le caractre nul.
Les groupes capturant dans le code source de l'expression rationnelle correspondent leurs rsultats un par un. Si un groupe capturant n'est pas reconnu (par exemple, s'il appartient une alternative non reconnue dans une disjonction), le rsultat correspondant est undefined.
/(ab)|(cd)/.exec("cd"); // ['cd', undefined, 'cd']
Vous pouvez quantifier les groupes de capture. Dans ce cas, les informations de correspondance associes ce groupe correspondent sa dernire correspondance.
/([ab])+/.exec("abc"); // ['ab', 'b']; car "b" vient aprs "a", ce rsultat remplace le prcdent
Les groupes capturant peuvent tre utiliss dans les assertions anticipes et de prcdence. Comme les assertions de prcdence reconnaissent leurs atomes l'envers, la correspondance finale associe ce groupe est celle qui apparat l'extrmit gauche de la chane de caractres. Toutefois, les indices des groupes correspondants conservent leurs positions relatives dans le code source de l'expression rationnelle.
/c(?=(ab))/.exec("cab"); // ['c', 'ab']
/(?<=(a)(b))c/.exec("abc"); // ['c', 'a', 'b']
/(?<=([ab])+)c/.exec("abc"); // ['c', 'a']; car l'assertion rtrospective reconnat "a" aprs avoir reconnu "b"
Vous pouvez imbriquer les groupes de capture. Dans ce cas, le groupe externe reoit d'abord son numro, puis le groupe interne, car ils sont ordonns selon leurs parenthses ouvrantes. Si un quantificateur rpte un groupe imbriqu, chaque correspondance du groupe remplace les rsultats des sous-groupes, parfois par undefined.
/((a+)?(b+)?(c))*/.exec("aacbbbcac"); // ['aacbbbcac', 'ac', 'a', undefined, 'c']
Dans l'exemple ci-dessus, le groupe externe correspond trois fois :
"aac", avec les sous-groupes "aa", undefined, et "c"."bbbc", avec les sous-groupes undefined, "bbb", et "c"."ac", avec les sous-groupes "a", undefined, et "c".Le rsultat "bbb" de la deuxime correspondance n'est pas conserv, car la troisime correspondance le remplace par undefined.
Vous pouvez obtenir les indices de dbut et de fin de chaque groupe capturant dans la chane de caractres d'entre en utilisant l'indicateur d. Cela ajoute une proprit indices au tableau retourn par exec().
Vous pouvez ventuellement dfinir un nom pour un groupe capturant, ce qui aide viter les piges lis aux positions des groupes et l'indexation. Voir les groupes capturant nomms pour plus d'informations.
Les parenthses ont d'autres usages dans diffrentes syntaxes d'expressions rationnelles. Par exemple, elles encadrent galement les assertions anticipes et les assertions de prcdence. Comme ces syntaxes commencent toutes par ?, et que ? est un quantificateur qui ne peut normalement pas apparatre directement aprs (, cela ne cre pas d'ambigut.
L'exemple suivant correspond une date au format YYYY-MM-DD :
function analyserDate(entree) {
const fragment = /^(\d{4})-(\d{2})-(\d{2})$/.exec(entree);
if (!fragment) {
return null;
}
return fragment.slice(1).map((p) => parseInt(p, 10));
}
analyserDate("2019-01-01"); // [2019, 1, 1]
analyserDate("2019-06-19"); // [2019, 6, 19]
La fonction suivante correspond aux motifs title='xxx' et title="xxx" dans une chane de caractres. Pour garantir que les guillemets correspondent, nous utilisons une rtro-rfrence pour faire rfrence au premier guillemet. L'accs au deuxime groupe capturant ([2]) retourne la chane de caractres entre les guillemets correspondants :
function analyserTitre(chaineDeCaracteresMeta) {
return chaineDeCaracteresMeta.match(/title=(["'])(.*?)\1/)[2];
}
analyserTitre('title="toto"'); // 'toto'
analyserTitre("title='toto' lang='en'"); // 'toto'
analyserTitre('title="Avantages des groupes capturant nomms"'); // "Avantages des groupes capturant nomms"
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # prod-Atom |
(?:...)(?<name>...)\1, \2Cette page a t modifie le 9 oct. 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |