Skip to content

Latest commit

 

History

History
87 lines (56 loc) · 4 KB

File metadata and controls

87 lines (56 loc) · 4 KB

Багаторядковий режим якорів ^ $, прапора "m"

Багаторядковий режим вмикається прапором 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`.

І в кінці тексту.

Шукаємо \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 у шаблоні використовується, коли нам потрібні символи нового рядка в результаті, тоді як якорі використовуються, щоб знайти щось на початку/кінці рядка.