en.javascript.info/03-more/08-regular-expressions-javascript/14-regexp-multiline-mode/article.md
Ilya Kantor f301cb744d init
2014-10-26 22:10:13 +03:00

2.5 KiB
Raw Blame History

Многострочный режим, флаг "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]