| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Regular_expressions/Quantifier | [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 quantificateur (quantifier en anglais) rpte un atome un certain nombre de fois. Le quantificateur est plac aprs l'atome auquel il s'applique.
// Gourmand
atom?
atom*
atom+
atom{count}
atom{min,}
atom{min,max}
// Non-gourmand
atom??
atom*?
atom+?
atom{count}?
atom{min,}?
atom{min,max}?
Note :
Ajouter ? aprs {count} est syntaxiquement valide mais pratiquement inutile. Comme {count} correspond toujours exactement count fois, atom{count}? se comporte de la mme manire que atom{count}.
atomUn seul atome.
countUn entier positif ou nul. Le nombre de fois que l'atome doit tre rpt.
minUn entier positif ou nul. Le nombre minimum de fois que l'atome peut tre rpt.
max FacultatifUn entier positif ou nul. Le nombre maximum de fois que l'atome peut tre rpt. S'il est omis, l'atome peut tre rpt autant de fois que ncessaire.
Un quantificateur est plac aprs un atome pour le rpter un certain nombre de fois. Il ne peut pas apparatre seul. Chaque quantificateur peut dfinir un nombre minimum et maximum de fois qu'un motif doit tre rpt.
| Quantificateur | Minimum | Maximum |
|---|---|---|
? |
0 | 1 |
* |
0 | Infini |
+ |
1 | Infini |
{count} |
count |
count |
{min,} |
min |
Infini |
{min,max} |
min |
max |
Pour les syntaxes {count}, {min,} et {min,max}, il ne peut pas y avoir d'espaces autour des nombres sinon, cela devient un motif littral.
const re = /a{1, 3}/;
re.test("aa"); // false
re.test("a{1, 3}"); // true
Ce comportement est corrig en mode sensible l'Unicode, o les accolades ne peuvent pas apparatre littralement sans chappement. La possibilit d'utiliser { et } littralement sans les chapper est une syntaxe obsolte pour la compatibilit du Web, et vous ne devez pas vous y fier.
/a{1, 3}/u; // SyntaxError: Invalid regular expression: Incomplete quantifier
Une erreur de syntaxe se produit si le minimum est suprieur au maximum.
/a{3,2}/; // SyntaxError: Invalid regular expression: numbers out of order in {} quantifier
Les quantificateurs peuvent faire correspondre plusieurs fois les groupes capturant. Consultez la page sur les groupes de capture pour en savoir plus sur leur comportement dans ce cas.
Chaque correspondance rpte ne doit pas ncessairement tre la mme chane de caractres.
/[ab]*/.exec("aba"); // ['aba']
Par dfaut, les quantificateurs sont gourmands, c'est--dire qu'ils tentent de correspondre autant de fois que possible jusqu' atteindre le maximum ou jusqu' ce qu'aucune autre correspondance ne soit possible. Vous pouvez rendre un quantificateur non gourmand en ajoutant ? aprs celui-ci. Dans ce cas, le quantificateur tente de correspondre le moins de fois possible et ne correspond davantage que s'il est impossible de faire correspondre le reste du motif avec ce nombre de rptitions.
/a*/.exec("aaa"); // ['aaa']; toute l'entre est consomme
/a*?/.exec("aaa"); // ['']; il est possible de ne consommer aucun caractre tout en russissant la correspondance
/^a*?$/.exec("aaa"); // ['aaa']; il est impossible de consommer moins de caractres tout en russissant la correspondance
Cependant, ds que l'expression rationnelle correspond la chane de caractres un indice, elle n'essaie pas les indices suivants, mme si cela peut consommer moins de caractres.
/a*?$/.exec("aaa"); // ['aaa']; la correspondance russit dj au premier caractre, donc l'expression rationnelle ne tente jamais de commencer la correspondance au deuxime caractre
Les quantificateurs gourmands peuvent essayer moins de rptitions s'il est autrement impossible de faire correspondre le reste du motif.
/[ab]+[abc]c/.exec("abbc"); // ['abbc']
Dans cet exemple, [ab]+ correspond d'abord de manire avide "abb", mais [abc]c ne peut pas correspondre au reste du motif ("c"), donc le quantificateur est rduit pour ne correspondre qu' "ab".
Les quantificateurs gourmands vitent de faire correspondre une infinit de chanes de caractres vides. Si le nombre minimum de correspondances est atteint et que l'atome ne consomme plus de caractres cette position, le quantificateur cesse de correspondre. C'est pourquoi /(a*)*/.exec("b") ne provoque pas de boucle infinie.
Les quantificateurs gourmands tentent de correspondre autant de fois que possible ; ils ne maximisent pas la longueur de la correspondance. Par exemple, /(aa|aabaac|ba)*/.exec("aabaac") correspond "aa" puis "ba" au lieu de "aabaac".
Les quantificateurs s'appliquent un seul atome. Si vous souhaitez quantifier un motif plus long ou une disjonction, vous devez le grouper. Les quantificateurs ne peuvent pas s'appliquer aux assertions.
/^*/; // SyntaxError: Invalid regular expression: nothing to repeat
En mode sensible l'Unicode, les assertions anticipes peuvent tre quantifies. Il s'agit d'une syntaxe obsolte pour la compatibilit du Web, et vous ne devez pas vous y fier.
/(?=a)?b/.test("b"); // true ; l'assertion anticipe correspond 0 fois
L'exemple suivant supprime les balises HTML encadres par des chevrons. Notez l'utilisation de ? pour viter de consommer trop de caractres la fois.
function retirerBalises(str) {
return str.replace(/<.+?>/g, "");
}
retirerBalises("<p><em>lorem</em> <strong>ipsum</strong></p>"); // 'lorem ipsum'
Vous pouvez obtenir le mme rsultat avec une correspondance gourmande, sans permettre au motif rpt de correspondre >.
function retirerBalises(str) {
return str.replace(/<[^>]+>/g, "");
}
retirerBalises("<p><em>lorem</em> <strong>ipsum</strong></p>"); // 'lorem ipsum'
Attention :
Ceci est uniquement des fins de dmonstration cela ne gre pas > dans les valeurs des attributs. Utilisez un assainisseur HTML appropri comme l'API HTML Sanitizer la place.
En Markdown, les paragraphes sont spars par une ou plusieurs lignes vides. L'exemple suivant compte tous les paragraphes d'une chane de caractres en faisant correspondre au moins deux sauts de ligne.
function compterParagraphes(str) {
return str.match(/(?:\r?\n){2,}/g).length + 1;
}
compterParagraphes(`
Paragraphe 1
Paragraphe 2
Contient quelques sauts de ligne, mais reste le mme paragraphe
Un autre paragraphe
`); // 3
Attention : Cet exemple sert uniquement la dmonstration il ne gre pas les sauts de ligne dans les blocs de code ni dans les autres lments de bloc Markdown comme les titres. Utilisez plutt un analyseur Markdown appropri.
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # prod-Quantifier |
|[...], [^...]Cette 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 |