en.javascript.info/10-regular-expressions-javascript/14-regexp-multiline-mode/article.md
2015-03-12 10:26:02 +03:00

2.4 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]