javascript - 多行匹配的正则表达式

标签 javascript regex

我有这样的格式:

-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

我可以做什么来实现我想要的目标?

最佳答案

由于 JavaScript 不支持 Singleline (/s) 标志,因此您需要发挥创意:

/^-(.*?):(.*(?:[\r\n]+[^-].*)*)/gm
  • /^- - 以破折号开头
  • (.*?): - 将非冒号的所有内容捕获到组 1
  • (.* - 启动第 2 组并捕获所有内容
  • (?:[\r\n]+[^-].*)* - 如果检测到换行符并且该行不是以破折号开头,则将整行捕获到组中2;根据需要重复零次或多次
  • ) - 关闭组 2
  • /gm - 全局和多行标志

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

关于javascript - 多行匹配的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60284739/

相关文章:

javascript - 编辑对象数组中对象的属性

javascript - 如何检查是否存在可观察到的 knockout ?

javascript - D3从对象的json属性中嵌套选择和兄弟

regex - URL正则表达式组捕获

javascript - HTML/CSS : How to make a bar on the side to take you to a certain part of the page

javascript - 根据我的项目中的以下要求转换json

javascript - 使用 iOS 为多种语言解析推文的#hashtags 和@usernames

java - 匹配最多 2 位小数的数字的正则表达式

regex - 从文件名中有选择地提取数字

regex - readLines 将连字符 (-) 转换为\x