Багаторядковий режим вмикається прапором pattern:m
.
Це впливає лише на поведінку pattern:^
і pattern:$
.
У багаторядковому режимі вони збігаються не тільки на початку та в кінці тексту, а й на початку/кінці кожного рядка у тексті.
У прикладі нижче текст складається з кількох рядків. Шаблон pattern:/^\d/gm
бере цифру з початку кожного рядка:
let str = `1 місце: Вінні-Пух
2 місце: Паць
3 місце: Слонопотам`;
*!*
console.log( str.match(/^\d/gm) ); // 1, 2, 3
*/!*
Без прапора pattern:m
збігається лише перша цифра:
let str = `1 місце: Вінні
2 місце: Паць
3 місце: Слонопотам;
*!*
console.log( str.match(/^\d/g) ); // 1
*/!*
Це тому, що за замовчуванням карет pattern:^
збігається лише на початку тексту, а в багаторядковому режимі -- на початку будь-якого рядка.
"Початок рядка" формально означає "відразу після розриву рядка": тестовий `pattern:^` у багаторядковому режимі збігається в усіх позиціях, яким передує символ нового рядка `\n`.
І на початку тексту.
Символ долара pattern:$
поводиться аналогічно.
Регулярний вираз pattern:\d$
шукає останню цифру у кожному рядку
let str = `Вінні: 1
Паць: 2
Слонопотам: 3`;
console.log( str.match(/\d$/gm) ); // 1,2,3
Без прапора pattern:m
, символ долара pattern:$
відповідатиме лише кінці всього тексту, тому буде знайдено лише останню цифру.
"Кінець рядка" формально означає "безпосередньо перед розривом рядка": тестовий `pattern:$` у багаторядковому режимі збігається в усіх позиціях після символу нового рядка `\n`.
І в кінці тексту.
Щоб знайти новий рядок, ми можемо використовувати не лише якорі pattern:^
і pattern:$
, а й символ нового рядка \n
.
У чому різниця? Подивімось на приклад.
Тут ми шукаємо pattern:\d\n
замість pattern:\d$
:
let str = `Вінні: 1
Паць: 2
Слонопотам: 3`;
console.log( str.match(/\d\n/g) ); // 1\n,2\n
Як бачимо, 2 збіги замість 3-х.
Це тому, що після об'єкт:3
немає нового рядка (хоча є кінець тексту, тому він відповідає pattern:$
).
Ще одна відмінність: тепер кожен збіг містить символ нового рядка match:\n
. На відміну від якорів pattern:^
pattern:$
, які лише перевіряють умову (початок/кінець рядка), \n
є символом, тому він стає частиною результату.
Отже, \n
у шаблоні використовується, коли нам потрібні символи нового рядка в результаті, тоді як якорі використовуються, щоб знайти щось на початку/кінці рядка.