Multilineitate în expresiile regulate JavaScript

Expresiile regulate atunci când lucrează cu șiruri multiline au particularitățile lor. Să le înțelegem pe exemplul următorului șir, care conține caractere obișnuite, caractere de newline și tabulație:

javascriptlet str = `111
  222
  333
  444`;

Newline

Caracterele de newline pot fi prinse cu comanda '\n':

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

Ca rezultat, în variabilă se va scrie următorul (spațiile dintre linii sunt tabulații):

javascript`111!  222!  333!  444`;

Tabulare

Caracterele de tabulare pot fi prinse cu comanda '\t':

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

Ca rezultat, în variabilă se va scrie următorul:

javascript`
                111
                !222
                !333
                !444
            `;

Funcționarea punctului

Comanda '.' pentru șiruri multiline nu prinde caracterele de newline:

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

Ca rezultat, în variabilă se va scrie următorul:

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

Orice caracter

Pentru a prinde toate caracterele dintr-un șir multiline, se folosește un truc sub forma combinației [\s\S]. O astfel de construcție va găsi toate caracterele obișnuite și toate newline-urile:

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

Ca rezultat, în variabilă se va scrie următorul:

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

Circumflex

Cu ajutorul modificatorului 'm' se poate activa modul multiline. În acest caz, circumflex-ul va prinde începutul fiecărei linii:

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

Ca rezultat, în variabilă se va scrie următorul:

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

Dolar

Comanda ' în modul multiline va prinde sfârșitul fiecărei linii:

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

Ca rezultat, în variabilă se va scrie următorul:

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

Probleme practice

Задание 1

Este dat șirul:

javascript`
  abc
  def
  ghi
  jkl
`;

Scrieți o expresie regulată care va face din acest șir următorul:

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

Este dat șirul:

javascript`
  abc
  def
  ghi
  jkl
`;

Scrieți o expresie regulată care va face din acest șir următorul:

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

Este dat șirul:

javascript`
  abc
  def
  ghi
  jkl
`;

Scrieți o expresie regulată care va face din acest șir următorul:

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

Este dat șirul:

javascript`
  abc
  def
  ghi
  jkl
`;

Scrieți o expresie regulată care va face din acest șir următorul:

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

Este dat șirul:

javascript`
  abc
  def
  ghi
  jkl
`;

Scrieți o expresie regulată care va face din acest șir următorul:

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

Este dat șirul:

javascript`
  abc
  def
  ghi
  jkl
`;

Scrieți o expresie regulată care va face din acest șir următorul:

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