Multiligne dans les regex JavaScript
Les expressions régulières ont leurs spécificités lorsqu'elles travaillent avec des chaînes multilignes. Voyons cela sur l'exemple de la chaîne suivante, contenant des caractères ordinaires, des sauts de ligne et des tabulations :
let str = `111
222
333
444`;
Saut de ligne
Les sauts de ligne peuvent être
attrapés avec la commande '\n' :
let res = str.replace(/\n/g, '!');
En conséquence, la variable contiendra ce qui suit (les espaces entre les lignes sont des tabulations) :
`111! 222! 333! 444`;
Tabulation
Les tabulations peuvent être
attrapées avec la commande '\t' :
let res = str.replace(/\t/g, '!');
En conséquence, la variable contiendra ce qui suit :
`
111
!222
!333
!444
`;
Comportement du point
La commande '.', avec une chaîne
multiligne, n'attrape pas les sauts de ligne :
let res = str.replace(/./g, '!');
En conséquence, la variable contiendra ce qui suit :
`
!!!
!!!!
!!!!
!!!!
`;
Tout caractère
Pour attraper tous les caractères dans une chaîne
multiligne, on utilise une astuce sous la forme
de la combinaison [\s\S]. Cette construction trouvera
tous les caractères ordinaires et tous les sauts de ligne :
let res = str.replace(/[\s\S]/g, '!');
En conséquence, la variable contiendra ce qui suit :
`!!!!!!!!!!!!!!!!!!`;
Accent circonflexe
Avec le modificateur 'm'
on peut activer le mode multiligne.
Dans ce cas, l'accent circonflexe matchera
le début de chaque ligne :
let res = str.replace(/^/gm, '!');
En conséquence, la variable contiendra ce qui suit :
`
!111
!222
!333
!444
`;
Dollar
La commande '$' en mode multiligne
attrapera la fin de chaque ligne :
let res = str.replace(/$/gm, '!');
En conséquence, la variable contiendra ce qui suit :
`
111!
222!
333!
444!
`;
Problèmes pratiques
Soit une chaîne :
`
abc
def
ghi
jkl
`;
Écrivez une expression régulière qui transformera cette chaîne en celle-ci :
`
abc!
def!
ghi!
jkl!
`;
Soit une chaîne :
`
abc
def
ghi
jkl
`;
Écrivez une expression régulière qui transformera cette chaîne en celle-ci :
`
! abc
! def
! ghi
! jkl
`;
Soit une chaîne :
`
abc
def
ghi
jkl
`;
Écrivez une expression régulière qui transformera cette chaîne en celle-ci :
`!
abc
def
ghi
jkl
!`;
Soit une chaîne :
`
abc
def
ghi
jkl
`;
Écrivez une expression régulière qui transformera cette chaîne en celle-ci :
`!
! abc
! def
! ghi
! jkl
!`;
Soit une chaîne :
`
abc
def
ghi
jkl
`;
Écrivez une expression régulière qui transformera cette chaîne en celle-ci :
`!
abc!
def!
ghi!
jkl!
!`;
Soit une chaîne :
`
abc
def
ghi
jkl
`;
Écrivez une expression régulière qui transformera cette chaîne en celle-ci :
`
!abc
!def
!ghi
!jkl
`;