2.4 KiB
Многострочный режим, флаг "m"
Многострочный режим включается, если у регэкспа есть флаг /m
.
[cut]
В этом случае изменяется поведение ^
и $
.
В многострочном режиме якоря означают не только начало/конец текста, но и начало/конец строки.
В примере ниже текст состоит из нескольких строк. Паттерн /^\d+/gm
берёт число с начала каждой строки:
//+ run
var str = '1е место: Винни-пух\n' +
'2е место: Пятачок\n' +
'33е место: Слонопотам';
alert( str.match(/^\d+/gm) ); // 1, 2, 33*!*
Обратим внимание -- без флага /m
было бы только первое число:
//+ run
var str = '1е место: Винни-пух\n' +
'2е место: Пятачок\n' +
'33е место: Слонопотам';
alert( str.match(/^\d+/g) ); // 1
Это потому что в обычном режиме каретка ^
-- это только начало текста.
Символ доллара $
ведёт себя точно так же.
Следующий пример находит последнее слово в строке:
TODO: указать на коренное отличие $ от \n: доллар не матчит символ, а \n матчит!!!!
//+ run
showMatch(
'1st: *!*John*!*\n' +
'2nd: *!*Mary*/!*\n' +
'33rd: *!*Peter*/!*', /\w+$/gm ) // John, Mary, Peter
Please note that $
as well as ^
doesn't add \n
to the match. They only check that the position is right.
[summary]
- The caret
'^'
matches the position at the the text start. *In multiline mode* it also matches after the newline symbol. - The dollar
'$'
matches the position at the text end. *In multiline mode* it also matches before the newline symbol.
For both anchors, the regexp engine only checks the position, and doesn't match a character. [/summary]