Víceřádkovost v regulárních výrazech JavaScriptu

Regulární výrazy při práci s víceřádkovými řetězci mají své zvláštnosti. Pojďme se s nimi seznámit na příkladu následujícího řetězce, obsahujícího obyčejné znaky, znaky pro nový řádek a tabelátory:

javascriptlet str = `111
  222
  333
  444`;

Nový řádek

Znaky pro nový řádek lze zachytit pomocí příkazu '\n':

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

Výsledkem bude do proměnné zapsáno následující (mezery mezi řádky jsou tabelátory):

javascript`111!  222!  333!  444`;

Tabelátor

Znaky tabelátoru lze zachytit pomocí příkazu '\t':

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

Výsledkem bude do proměnné zapsáno následující:

javascript`
                111
                !222
                !333
                !444
            `;

Funkce tečky

Příkaz '.' pro víceřádkový řetězec nezachytává znaky pro nový řádek:

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

Výsledkem bude do proměnné zapsáno následující:

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

Libovolný znak

Pro zachycení všech znaků ve víceřádkovém řetězci se používá chytrý trik ve formě kombinace [\s\S]. Tato konstrukce najde všechny obyčejné znaky a všechny znaky nového řádku:

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

Výsledkem bude do proměnné zapsáno následující:

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

Stříška

Pomocí modifikátoru 'm' lze zapnout víceřádkový režim. V tomto případě bude stříška zachytávat začátek každého řádku:

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

Výsledkem bude do proměnné zapsáno následující:

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

Dolar

Příkaz ' v víceřádkovém režimu bude zachytávat konec každého řádku:

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

Výsledkem bude do proměnné zapsáno následující:

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

Praktické úlohy

Задание 1

Je dán řetězec:

javascript`
  abc
  def
  ghi
  jkl
`;

Napište regulární výraz, který vytvoří z tohoto řetězce následující:

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

Je dán řetězec:

javascript`
  abc
  def
  ghi
  jkl
`;

Napište regulární výraz, který vytvoří z tohoto řetězce následující:

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

Je dán řetězec:

javascript`
  abc
  def
  ghi
  jkl
`;

Napište regulární výraz, který vytvoří z tohoto řetězce následující:

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

Je dán řetězec:

javascript`
  abc
  def
  ghi
  jkl
`;

Napište regulární výraz, který vytvoří z tohoto řetězce následující:

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

Je dán řetězec:

javascript`
  abc
  def
  ghi
  jkl
`;

Napište regulární výraz, který vytvoří z tohoto řetězce následující:

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

Je dán řetězec:

javascript`
  abc
  def
  ghi
  jkl
`;

Napište regulární výraz, který vytvoří z tohoto řetězce následující:

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