javascript - 正则表达式lookbehind (JS) 中的可选字符

标签 javascript regex regex-lookarounds

我正在尝试使用正则表达式来解析模板中的一些内容。有开始标签和结束标签,但我只想选择这些标签之间的内容(以便我可以 String.replace)

内容看起来像这样:

OpenTag
  The Content I want
CloseTag

OpenTag The Content I want CloseTag

我使用的正则表达式如下所示:

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

我遇到的问题是,有时可能有换行符,有时则没有,但是一旦我通过 (\n)? 在lookbehind中将换行符设置为可选,换行符包含在捕获组中(即使它看起来应该是后面的外观的一部分)。

如果我取消换行符,则内容中的第二个示例不会匹配。

regex101.com 上的示例,https://regex101.com/r/teBEQ9/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)

关于javascript - 正则表达式lookbehind (JS) 中的可选字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650179/

相关文章:

javascript - 从 Javascript 心理学实验中收集数据

JavaScript ISO 8601 字符串转换为 Date 对象

删除最后一个特殊字符

java - JavaCC 中的多行注释

java - java中如何替换特定字符串?

javascript - Meteorjs有效显示管理面板

javascript - 如何将我的Electron应用程序设为打开文件的默认设置?

java - java正则表达式有问题

正则表达式 : If-Clause for capturing group possible?

java - 正则表达式否定模式