Víceřádkový režim kotev ^ $, příznak m

Víceřádkový režim je povolen příznakem m .

Ovlivňuje pouze chování ^ a $ .

Ve víceřádkovém režimu se shodují nejen na začátku a na konci řetězce, ale také na začátku/konci řádku.

Vyhledávání na začátku řádku ^

V příkladu níže má text více řádků. Vzor /^\d/gm vezme číslici od začátku každého řádku:

let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;

console.log( str.match(/^\d/gm) ); // 1, 2, 3

Bez příznaku m odpovídá pouze první číslici:

let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;

console.log( str.match(/^\d/g) ); // 1

Je to proto, že ve výchozím nastavení je stříška ^ shoduje se pouze na začátku textu a ve víceřádkovém režimu – na začátku libovolného řádku.

Poznámka:

„Začátek řádku“ formálně znamená „ihned po zalomení řádku“:test ^ ve víceřádkovém režimu se shoduje na všech pozicích, před kterými je znak nového řádku \n .

A na začátku textu.

Vyhledávání na konci řádku $

Znak dolaru $ se chová podobně.

Regulární výraz \d$ najde poslední číslici v každém řádku

let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;

console.log( str.match(/\d$/gm) ); // 1,2,3

Bez příznaku m , dolar $ by odpovídalo pouze konci celého textu, takže by byla nalezena pouze poslední číslice.

Poznámka:

„Konec řádku“ formálně znamená „bezprostředně před zalomením řádku“:test $ ve víceřádkovém režimu odpovídá na všech pozicích znak nového řádku \n .

A na konci textu.

Hledá se \n místo ^ $

K nalezení nového řádku můžeme použít nejen kotvy ^ a $ , ale také znak nového řádku \n .

Jaký je v tom rozdíl? Podívejme se na příklad.

Zde hledáme \d\n místo \d$ :

let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;

console.log( str.match(/\d\n/g) ); // 1\n,2\n

Jak vidíme, existují 2 zápasy místo 3.

Je to proto, že po 3 není žádný nový řádek (je tam však konec textu, takže odpovídá $ ).

Další rozdíl:nyní každá shoda obsahuje znak nového řádku \n . Na rozdíl od kotev ^ $ , které pouze testují podmínku (začátek/konec řádku), \n je postava, takže se stává součástí výsledku.

Takže \n ve vzoru se používá, když potřebujeme ve výsledku znaky nového řádku, zatímco kotvy se používají k nalezení něčeho na začátku/konci řádku.