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 :

javascriptlet str = `111
  222
  333
  444`;

Saut de ligne

Les sauts de ligne peuvent être attrapés avec la commande '\n' :

javascriptlet res = str.replace(/\n/g, '!');

En conséquence, la variable contiendra ce qui suit (les espaces entre les lignes sont des tabulations) :

javascript`111!  222!  333!  444`;

Tabulation

Les tabulations peuvent être attrapées avec la commande '\t' :

javascriptlet res = str.replace(/\t/g, '!');

En conséquence, la variable contiendra ce qui suit :

javascript`
                111
                !222
                !333
                !444
            `;

Comportement du point

La commande '.', avec une chaîne multiligne, n'attrape pas les sauts de ligne :

javascriptlet res = str.replace(/./g, '!');

En conséquence, la variable contiendra ce qui suit :

javascript`
                !!!
                !!!!
                !!!!
                !!!!
            `;

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 :

javascriptlet res = str.replace(/[\s\S]/g, '!');

En conséquence, la variable contiendra ce qui suit :

javascript`!!!!!!!!!!!!!!!!!!`;

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 :

javascriptlet res = str.replace(/^/gm, '!');

En conséquence, la variable contiendra ce qui suit :

javascript`
                !111
                !222
                !333
                !444
            `;

Dollar

La commande '$' en mode multiligne attrapera la fin de chaque ligne :

javascriptlet res = str.replace(/$/gm, '!');

En conséquence, la variable contiendra ce qui suit :

javascript`
                111!
  222!
  333!
  444!
            `;

Problèmes pratiques

Задание 1

Soit une chaîne :

javascript`
  abc
  def
  ghi
  jkl
`;

Écrivez une expression régulière qui transformera cette chaîne en celle-ci :

javascript`
  abc!
  def!
  ghi!
  jkl!
`;
Задание 2

Soit une chaîne :

javascript`
  abc
  def
  ghi
  jkl
`;

Écrivez une expression régulière qui transformera cette chaîne en celle-ci :

javascript`
!  abc
!  def
!  ghi
!  jkl
`;
Задание 3

Soit une chaîne :

javascript`
  abc
  def
  ghi
  jkl
`;

Écrivez une expression régulière qui transformera cette chaîne en celle-ci :

javascript`!
  abc
  def
  ghi
  jkl
!`;
Задание 4

Soit une chaîne :

javascript`
  abc
  def
  ghi
  jkl
`;

Écrivez une expression régulière qui transformera cette chaîne en celle-ci :

javascript`!
!  abc
!  def
!  ghi
!  jkl
!`;
Задание 5

Soit une chaîne :

javascript`
  abc
  def
  ghi
  jkl
`;

Écrivez une expression régulière qui transformera cette chaîne en celle-ci :

javascript`!
  abc!
  def!
  ghi!
  jkl!
!`;
Задание 6

Soit une chaîne :

javascript`
  abc
  def
  ghi
  jkl
`;

Écrivez une expression régulière qui transformera cette chaîne en celle-ci :

javascript`
                    !abc
                    !def
                    !ghi
                    !jkl
`;