Регулярки при работе с многострочными строками имеют свои особенности. Давайте с ними разбираться на примере следующей строки, содержащей обычные символы, символы перевода строк и табуляции:
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
`;