Regex lookbehind 中的可选字符 (JS)

Optional character in Regex lookbehind (JS)

我正在尝试使用 Regex 来解析模板中的一些内容。有开始标签和结束标签,但我只想select这些标签之间的内容(这样我就可以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

上的示例

您可以使用类似的东西:

OpenTag\s*([^]*?)\s*CloseTag

您想要的文字将在

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

带有 s 标志的点也匹配 \n 字符,并且由于它是可选的,所以它被捕获了。使用Array.match()和trim结果:

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)