正则表达式后向(JS)中的可选字符

时间:2019-10-31 19:37:50

标签: javascript regex regex-lookarounds

我正在尝试使用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 个答案:

答案 0 :(得分:2)

带有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 :(得分:1)

您可以使用类似的内容:

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

您想要的文本将在$1

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