Необязательный символ в регулярном выражении (JS) - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь использовать Regex для анализа содержимого из шаблона. Есть открывающие и закрывающие теги, но я просто хочу выбрать содержимое между этими тегами (чтобы я мог String.replace)

Содержимое выглядит примерно так:

OpenTag
  The Content I want
CloseTag

OpenTag The Content I want CloseTag

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

/(?<=OpenTag(\n))(.*?)(?=CloseTag)/msg

У меня проблема в том, что иногда может быть новая строка, а иногда нет, но как только я делаю новую строку необязательнойв просмотре с помощью (\n)?, новая строка включается в группу захвата (даже если кажется, что она должна быть частью просмотра).

Если я отменяю опцию новой строки, я неНа втором примере по содержанию нет совпадения.

Пример на regex101.com, https://regex101.com/r/teBEQ9/2

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Точка с флагом s также соответствует символу \n, и, поскольку это необязательно, она захватывается. Используйте Array.match() и обрежьте результаты:

const str = `OpenTag
  The Content I want
CloseTag

OpenTag The Content I want CloseTag`

const result = str.match(/(?<=OpenTag)(.*?)(?=CloseTag)/msg).map(s => s.trim())

console.log(result)
1 голос
/ 31 октября 2019

Вы можете использовать что-то вроде:

OpenTag\s*((?:.|\s)*?)\s*CloseTag

И желаемый текст будет в $1

https://regex101.com/r/FRbTKb/1

...