Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Modificateur : (?ims-ims:...)

Baseline 2025
Nouvellement disponible

Depuis septembre 2025, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

Un modificateur (modifier en anglais) remplace les paramètres d'indicateur dans une partie spécifique d'une expression régulière. Il peut être utilisé pour activer ou désactiver des indicateurs qui modifient la signification de certains éléments de syntaxe des expressions régulières. Ces indicateurs sont i, m, et s.

Syntaxe

regex
(?flags1:pattern)
(?flags1-flags2:pattern)

Note : JavaScript possède uniquement la forme « délimitée » du modificateur, où le motif se trouve dans le groupe du modificateur. La plupart des autres langages prenant en charge les modificateurs proposent une forme « non délimitée », où le modificateur s'applique jusqu'à la fin du groupe englobant le plus proche.

Paramètres

flags1 Facultatif

Une chaîne de caractères contenant les indicateurs à activer. Elle peut contenir n'importe quelle combinaison de i, m et s.

flags2 Facultatif

Une chaîne de caractères contenant les indicateurs à désactiver. Elle peut contenir n'importe quelle combinaison de i, m et s, mais aucun indicateur déjà présent dans flags1.

pattern

Un motif constitué de tout ce que vous pouvez utiliser dans un littéral d'expression rationnelle, y compris une disjonction.

Description

Certains indicateurs modifient le sens des éléments de syntaxe des expressions rationnelles :

  • L'indicateur i rend l'expression rationnelle insensible à la casse en faisant correspondre sans distinction de casse tous les caractères littéraux et les classes de caractères.
  • L'indicateur m modifie le comportement des assertions de limite d'entrée ^ et $ pour qu'elles correspondent au début et à la fin de chaque ligne, en plus du début et de la fin de l'entrée.
  • L'indicateur s modifie le comportement du joker . afin qu'il corresponde à n'importe quel caractère, y compris les terminateurs de ligne.

Parfois, vous souhaitez que ces changements ne prennent effet que dans une partie précise d'un motif d'expression rationnelle. Pour cela, vous pouvez encadrer cette partie avec un modificateur. Par exemple :

js
/(?i:Bonjour) le monde/;

Dans cette expression rationnelle, l'indicateur i est activé uniquement pour la partie Bonjour du motif. La partie le monde distingue les majuscules des minuscules. L'expression correspond donc à Bonjour le monde, bonjour le monde et BONJOUR le monde, mais pas à BONJOUR LE MONDE. L'expression suivante est équivalente, car elle active globalement l'indicateur i, puis le désactive pour la partie le monde :

js
/Bonjour (?-i:le monde)/i;

Les paramètres flags1 et flags2 peuvent contenir n'importe quelle combinaison de i, m et s. Toutefois, chaque indicateur doit être unique entre flags1 et flags2 — vous ne pouvez ni activer ou désactiver deux fois un indicateur, ni l'activer puis le désactiver immédiatement.

Les paramètres flags1 et flags2 sont facultatifs, mais au moins l'un d'eux ne doit pas être vide. (?flags1-:pattern) est un modificateur qui active uniquement des indicateurs (équivalent à (?flags1:pattern)). (?-flags2:pattern) est un modificateur qui désactive uniquement des indicateurs. (?:pattern) est simplement un groupe non capturant, et (?-:pattern) est une erreur de syntaxe.

Les autres indicateurs ne sont pas pertinents dans un modificateur et provoquent donc une erreur de syntaxe s'ils sont inclus :

  • Les indicateurs g et y déterminent le comportement de plusieurs appels à exec() et influent sur la correspondance de l'expression rationnelle entière.
  • L'indicateur d ajoute des informations au résultat de exec() et influe sur la correspondance de l'expression rationnelle entière.
  • Les indicateurs u et v modifient le comportement du moteur d'expressions rationnelles d'une manière trop complexe pour être modifiée localement. Ils ont également des effets globaux sur l'expression rationnelle, par exemple sur l'incrémentation de lastIndex.

Exemples

Faire correspondre un format sur plusieurs lignes uniquement au début de la chaîne de caractères

L'expression rationnelle suivante définit un format pour une chaîne de caractères sur plusieurs lignes. Le premier ^ représente le début de l'entrée entière, car il se trouve dans un modificateur (?-m:), tandis que tous les autres ^ représentent le début d'une ligne :

js
const motif = /(?-m:^)---\n^title:.*^slug:.*^---/ms;

const entree = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;

motif.test(entree); // true

// Saut de ligne supplémentaire au début de la chaîne de caractères
const entree2 = `\n${entree}`;

motif.test(entree2); // false

Faire correspondre certains mots sans distinction de casse

Imaginez que vous recherchiez toutes les déclarations de variables nommées toto ou truc (car ce sont de mauvais noms). Le mot peut apparaître avec n'importe quelle casse, mais vous savez que le mot-clé est toujours en minuscules, vous pouvez donc procéder ainsi :

js
const motif = /(?:var|let|const) (?i:toto|truc)\b/;

motif.test("let toto;"); // true
motif.test("const TRUC = 1;"); // true
motif.test("Let toto est un nombre"); // false

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# prod-RegularExpressionModifiers

Compatibilité des navigateurs

Voir aussi