Многострочность в регулярках JavaScript

Регулярки при работе с многострочными строками имеют свои особенности. Давайте с ними разбираться на примере следующей строки, содержащей обычные символы, символы перевода строк и табуляции:

let str = `111 222 333 444`;

Перевод строки

Символы перевода строки можно поймать с помощью команды '\n':

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

В результате в переменную запишется следующее (промежутки между строками - это табуляция):

`111! 222! 333! 444`;

Табуляция

Символы табуляции можно поймать с помощью команды '\t':

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

В результате в переменную запишется следующее:

` 111 !222 !333 !444 `;

Работа точки

Команда '.' для многострочной строки не ловит символы перевода строки:

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

В результате в переменную запишется следующее:

` !!! !!!! !!!! !!!! `;

Любой символ

Чтобы поймать все символы в многострочной строке, используется хитрый прием в виде сочетания [\s\S]. Такая конструкция найдет все обычные символы и все переводы строк:

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

В результате в переменную запишется следующее:

`!!!!!!!!!!!!!!!!!!`;

Шляпка

С помощью модификатора 'm' можно включить многострочный режим. В этом случае шляпка будет ловить начало каждой строки:

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

В результате в переменную запишется следующее:

` !111 !222 !333 !444 `;

Доллар

Команда '$' в многострочном режиме будет ловить конец каждой строки:

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

В результате в переменную запишется следующее:

` 111! 222! 333! 444! `;

Практические задачи

Дана строка:

` abc def ghi jkl `;

Напишите регулярку, которая сделает из этой строки следующую:

` abc! def! ghi! jkl! `;

Дана строка:

` abc def ghi jkl `;

Напишите регулярку, которая сделает из этой строки следующую:

` ! abc ! def ! ghi ! jkl `;

Дана строка:

` abc def ghi jkl `;

Напишите регулярку, которая сделает из этой строки следующую:

`! abc def ghi jkl !`;

Дана строка:

` abc def ghi jkl `;

Напишите регулярку, которая сделает из этой строки следующую:

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

Дана строка:

` abc def ghi jkl `;

Напишите регулярку, которая сделает из этой строки следующую:

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

Дана строка:

` abc def ghi jkl `;

Напишите регулярку, которая сделает из этой строки следующую:

` !abc !def !ghi !jkl `;
enru