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.
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
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
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.
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.
Ici, world$ avec le drapeau m correspond à "world" à la fin de chaque ligne.
Exemple : extraction de lignes spécifiques
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
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
mgarantit que chaque ligne de la chaîne multiligne est traitée individuellement. Hello world,hello worldetHELLO WORLDcorrespondent tous au motif car ils contiennent "hello" (insensible à la casse) quelque part dans la ligne.
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
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
mn'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 drapeaumchange l'endroit où les lignes commencent et se terminent ; le drapeauschange ce que.correspond.mn'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\bplutôt que^/$.- Sans
g,match()ne renvoie que la première correspondance. Le drapeaumactive des positions d'ancre supplémentaires, mais vous avez toujours besoin degpour collecter chaque ligne. Combinez-les sous la formegm.
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.