W3docs

Drapeau m de Regex JavaScript (Multiligne)

Le drapeau m en JavaScript permet aux ancres ^ et $ de correspondre au début et à la fin de chaque ligne dans une chaîne multiligne.

Introduction au mode multiligne

Le drapeau m dans les expressions régulières JavaScript permet aux ancres ^ et $ de correspondre au début et à la fin de chaque ligne dans une chaîne multiligne, plutôt qu'au seul début et à la seule fin de la chaîne entière. Cela est particulièrement utile lorsque vous travaillez avec du texte multiligne et que vous avez besoin d'effectuer une correspondance de motifs ligne par ligne.

Cette page explique ce que change le drapeau m, en quoi il diffère du comportement par défaut des ancres, comment il se combine avec les drapeaux g et i, et des motifs pratiques pour analyser du texte orienté lignes, comme des journaux.

Comportement par défaut vs. mode multiligne

Par défaut (sans m), ^ ne correspond qu'au tout début de la chaîne entière et $ uniquement à sa toute fin. Un saut de ligne (\n) à l'intérieur de la chaîne est simplement un caractère ordinaire — il ne crée pas de nouvelles positions d'ancre.

Avec le drapeau m, ^ correspond également à la position juste après chaque \n, et $ correspond également à la position juste avant chaque \n (ainsi qu'au vrai début/fin de la chaîne). La correspondance elle-même n'inclut jamais le caractère de saut de ligne — les ancres sont des positions de largeur nulle.

javascript— editable

Sans m, seul le abc au tout début de la chaîne est ancré par ^. L'ajout de m permet à ^ de correspondre aussi après le saut de ligne, de sorte que les deux lignes abc sont trouvées. (Le drapeau g est ce qui collecte toutes les correspondances plutôt que de s'arrêter à la première.)

Le drapeau m : activation du mode multiligne

Lorsque vous utilisez le drapeau m, les ancres ^ et $ correspondent aux positions avant et après les sauts de ligne dans la chaîne.

Utilisation du drapeau m

javascript— editable

Dans cet exemple, la regex ^abc correspond au début de chaque ligne qui commence par "abc" grâce au drapeau m. Le drapeau g garantit que toutes les occurrences sont trouvées. Sans le drapeau m, seul "abc" au tout début de la chaîne serait trouvé.

Exemple : correspondance sur plusieurs lignes

javascript— editable

Ici, la regex ^start correspond au début des lignes qui commencent par "start" grâce à la combinaison des drapeaux m et g.

Applications pratiques

Correspondance de lignes dans un texte multiligne

Le drapeau m est particulièrement utile pour trouver des motifs spécifiques au début ou à la fin de chaque ligne dans une chaîne multiligne.

javascript— editable

Cet exemple montre comment ^hello avec le drapeau m correspond à "hello" au début de chaque ligne.

Correspondance en fin de ligne dans un texte multiligne

De même, vous pouvez utiliser le drapeau m pour trouver des motifs à la fin de chaque ligne.

javascript— editable

Ici, world$ avec le drapeau m correspond à "world" à la fin de chaque ligne.

Exemple : extraction de lignes spécifiques

javascript— editable

Cet exemple montre comment extraire toutes les lignes commençant par "Error:" d'un fichier journal à l'aide du drapeau m.

Combinaison de drapeaux

Vous pouvez combiner le drapeau m avec d'autres drapeaux pour enrichir vos expressions régulières. Par exemple, combiner le drapeau m avec le drapeau i (insensible à la casse) permet d'effectuer une correspondance multiligne insensible à la casse.

Exemple : correspondance multiligne insensible à la casse

javascript— editable

Dans cet exemple, la regex correspond aux lignes contenant "hello" quelle que soit la casse, grâce à la combinaison des drapeaux m et i.

  • Le motif regex ^.*hello.*$ correspond à toute ligne qui contient "hello" quelle que soit la casse.
  • Le drapeau m garantit que chaque ligne de la chaîne multiligne est traitée individuellement.
  • Hello world, hello world et HELLO WORLD correspondent tous au motif car ils contiennent "hello" (insensible à la casse) quelque part dans la ligne.
Info

Utilisez le drapeau m dans les regex JavaScript pour appliquer les ancres ^ et $ à chaque ligne d'une chaîne multiligne, améliorant ainsi votre capacité à valider et manipuler du contenu ligne par ligne.

Utiliser le drapeau m pour la validation ligne par ligne

Le drapeau m est idéal pour les scénarios où vous devez valider ou manipuler chaque ligne individuellement dans une chaîne multiligne.

Exemple : validation d'un numéro de téléphone américain

javascript— editable

Cette regex vérifie que le numéro de téléphone est au format (123) 456-7890. Elle utilise ^ pour affirmer le début et $ pour affirmer la fin, garantissant que la chaîne entière correspond au motif spécifié pour chaque ligne.

Ainsi, "(123) 456-7890" et "(234) 567-8901" correspondent tous deux au motif regex car ils suivent le format (xxx) xxx-xxxx, que la regex est conçue pour reconnaître.

Pièges courants

  • m n'affecte que ^ et $, pas . — Le point refuse toujours de correspondre à un saut de ligne. Si vous avez besoin que . traverse également les sauts de ligne, utilisez le drapeau séparé s (dotAll). Le drapeau m change l'endroit où les lignes commencent et se terminent ; le drapeau s change ce que . correspond.
  • m n'est pas identique à la correspondance de mots entiers. Pour correspondre aux limites d'un mot plutôt qu'à celles d'une ligne, utilisez la limite de mot \b plutôt que ^/$.
  • Sans g, match() ne renvoie que la première correspondance. Le drapeau m active des positions d'ancre supplémentaires, mais vous avez toujours besoin de g pour collecter chaque ligne. Combinez-les sous la forme gm.
javascript— editable

Conclusion

Le drapeau m dans les expressions régulières JavaScript étend la fonctionnalité des ancres ^ et $ pour qu'elles correspondent au début et à la fin de chaque ligne dans une chaîne multiligne. Cette capacité est précieuse pour traiter des données textuelles multilignes, permettant une correspondance et une validation de motifs précises ligne par ligne.

Pratique

Pratique
Quel est le rôle du drapeau 'm' dans les expressions régulières JavaScript ?
Quel est le rôle du drapeau 'm' dans les expressions régulières JavaScript ?
Was this page helpful?