Багаторядковий режим вмикається прапорцем 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 у шаблоні використовується, коли нам потрібно включити символи нового рядка в збіг, тоді як якорі використовуються, лише щоб знайти щось на початку/кінці рядка.
Коментарі
<code>, для кількох рядків – обгорніть їх тегом<pre>, для понад 10 рядків – використовуйте пісочницю (plnkr, jsbin, codepen…)