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