Regex для многострочных матчей - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть такой формат:

-Note1: Value is 02
-Note 2: Line 1
Line 2

Когда я заменяю строку на регулярное выражение, я хочу, чтобы она сгруппировалась следующим образом:

"Note1" "Value is 02"
"Note 2" "Line 1
Line 2" (the value for Note 2 spans 2 lines, which makes it "Line 1\nLine 2")

У моего текущего регулярного выражения есть этот вывод :

"Note1" "Value is 02"
"Note 2" "Line 1" (and leave out Line 2)

Текущее регулярное выражение:

/-(.*):(.*|\n*)/g

Что я могу сделать, чтобы достичь того, чего я хочу?

1 Ответ

1 голос
/ 18 февраля 2020

Поскольку JavaScript не поддерживает флаг Singleline (/s), вам нужно проявить творческий подход:

/^-(.*?):(.*(?:[\r\n]+[^-].*)*)/gm
  • /^- - начать с da sh
  • (.*?): - захватить все, что не является двоеточием, в группу 1
  • (.* - запустить группу 2 и захватить все
  • (?:[\r\n]+[^-].*)* - если обнаружена новая строка и строка не начинается с da sh, затем захватывает всю строку в группу 2; при необходимости повторите ноль или более раз
  • ) - закрыть группу 2
  • /gm - глобальные и многострочные флаги

https://regex101.com/r/3YW3Mg/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...