W3docs

Флаг m в регулярных выражениях JavaScript (многострочный режим)

Флаг m в регулярных выражениях JavaScript позволяет якорям ^ и $ совпадать с началом и концом каждой строки в многострочной строке.

Введение в многострочный режим

Флаг m в JavaScript регулярных выражениях позволяет якорям ^ и $ якоря совпадать с началом и концом каждой строки в многострочной строке, а не только с началом и концом всей строки целиком. Это особенно полезно при работе с многострочным текстом, когда нужно выполнять сопоставление шаблонов построчно.

На этой странице рассматривается, что именно изменяет флаг m, чем он отличается от поведения якорей по умолчанию, как он сочетается с флагами g и i, а также практические шаблоны для разбора текста в построчном формате, например журналов.

Поведение по умолчанию и многострочный режим

По умолчанию (без m) ^ совпадает только с самым началом всей строки, а $ — только с самым концом. Перенос строки (\n) внутри строки является обычным символом — он не создаёт новых позиций для якорей.

С флагом m якорь ^ также совпадает с позицией сразу после каждого \n, а $ — с позицией сразу перед каждым \n (а также с истинным началом и концом строки). Само совпадение никогда не включает символ переноса строки — якоря являются позициями нулевой ширины.

javascript— editable

Без m якорем ^ фиксируется только abc в самом начале строки. Добавление m позволяет ^ также совпадать после переноса строки, поэтому находятся обе строки с abc. (Флаг g собирает все совпадения, а не останавливается на первом.)

Флаг m: включение многострочного режима

При использовании флага m якоря ^ и $ совпадают с позициями до и после переносов строк внутри строки.

Использование флага m

javascript— editable

В этом примере регулярное выражение ^abc совпадает с началом каждой строки, начинающейся с «abc», благодаря флагу m. Флаг g гарантирует нахождение всех вхождений. Без флага m совпадение было бы только с «abc» в самом начале строки.

Пример: совпадение с несколькими строками

javascript— editable

Здесь регулярное выражение ^start совпадает с началом строк, начинающихся с «start», благодаря комбинации флагов m и g.

Практическое применение

Совпадение со строками в многострочном тексте

Флаг m особенно полезен для поиска конкретных шаблонов в начале или конце каждой строки многострочной строки.

javascript— editable

Этот пример показывает, как ^hello с флагом m совпадает с «hello» в начале каждой строки.

Совпадение с концом строк в многострочном тексте

Аналогично, флаг m можно использовать для поиска шаблонов в конце каждой строки.

javascript— editable

Здесь world$ с флагом m совпадает с «world» в конце каждой строки.

Пример: извлечение конкретных строк

javascript— editable

Этот пример демонстрирует извлечение всех строк, начинающихся с «Error:», из файла журнала с помощью флага m.

Комбинирование флагов

Флаг m можно комбинировать с другими флагами для расширения возможностей регулярных выражений. Например, сочетание флага m с флагом i (регистронезависимый поиск) позволяет выполнять регистронезависимое многострочное сопоставление.

Пример: регистронезависимое многострочное сопоставление

javascript— editable

В этом примере регулярное выражение находит строки, содержащие «hello», независимо от регистра, благодаря комбинации флагов m и i.

  • Шаблон ^.*hello.*$ совпадает с любой строкой, содержащей «hello» в любом регистре.
  • Флаг m обеспечивает обработку каждой строки многострочного текста по отдельности.
  • Hello world, hello world и HELLO WORLD — все совпадают с шаблоном, так как содержат «hello» (регистронезависимо) где-либо в строке.
Информация

Используйте флаг m в регулярных выражениях JavaScript, чтобы применять якоря ^ и $ к каждой строке многострочного текста, расширяя возможности проверки и обработки построчного содержимого.

Использование флага m для построчной валидации

Флаг m идеален для сценариев, когда нужно проверять или обрабатывать каждую строку по отдельности внутри многострочной строки.

Пример: проверка формата телефонного номера США

javascript— editable

Это регулярное выражение проверяет, что номер телефона соответствует формату (123) 456-7890. Оно использует ^ для фиксации начала и $ для фиксации конца, гарантируя, что вся строка совпадает с указанным шаблоном для каждой строки текста.

Таким образом, и "(123) 456-7890", и "(234) 567-8901" совпадают с шаблоном регулярного выражения, поскольку соответствуют формату (xxx) xxx-xxxx, для которого и предназначен этот шаблон.

Распространённые ошибки

  • m влияет только на ^ и $, но не на . — Точка по-прежнему не совпадает с переносом строки. Если нужно, чтобы . также пересекал переносы строк, используйте отдельный флаг s (dotAll). Флаг m изменяет, где строки начинаются и заканчиваются; флаг s изменяет то, с чем совпадает ..
  • m — это не то же самое, что совпадение с целыми словами. Для совпадения на границах слова, а не строки, используйте \b — границу слова вместо ^/$.
  • Без g метод match() возвращает только первое совпадение. Флаг m добавляет новые позиции для якорей, но для сбора всех строк всё равно нужен флаг g. Комбинируйте их как gm.
javascript— editable

Заключение

Флаг m в регулярных выражениях JavaScript расширяет функциональность якорей ^ и $, позволяя им совпадать с началом и концом каждой строки в многострочной строке. Эта возможность незаменима при обработке многострочных текстовых данных, обеспечивая точное построчное сопоставление и валидацию шаблонов.

Практика

Практика
Какова функция флага 'm' в регулярных выражениях JavaScript?
Какова функция флага 'm' в регулярных выражениях JavaScript?
Was this page helpful?