JavaScript 正则表达式获取两个短语之间的分隔匹配

标签 javascript regex

我可以用来解析以下文本的正则表达式模式是什么:

Mission m1
"Mission a is completing exam"
End Mission
Something is not necessary
Task t1
"Task b is keeping house"
comment: "... End Task"
End Task
abc
Task t2
Do something
End Task

..使其看起来如下所示:

[1]:
Mission m1
"Mission a is completing exam"
End Mission

[2]:
Task t2
Do something
End Task

[3]:
Task t2
Do something
End Task

我尝试了这个正则表达式模式 \b(?:Mission|Task)\b(.|\n)*\b(?:Mission|Task)\b - 问题是它只返回一个包含三个部分的结果。

最佳答案

这是对之前答案的完全重写,因为您的输入与开始时显示的内容有很大不同。

您需要一个简单的正则表达式来匹配两个字符串之间的字符串:

/^(Mission|Task)\b[\s\S]*?^End \1$/mg

这是一个unrolled version相同的正则表达式:

/^(Mission|Task)\b.*(?:\r?\n(?!End \1).*)*\r?\nEnd \1$/gm

请参阅regex demo

详细信息:

  • ^ - 行的开头
  • (Mission|Task)\b - MissionTask 整个单词
  • [\s\S]*? - 任意 0 个以上字符,尽可能少到第一个...
  • ^End\1$ - End、空格和捕获到第 1 组的单词作为整行。

关于JavaScript 正则表达式获取两个短语之间的分隔匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414350/

相关文章:

Java 正则表达式 : trouble extracting word phrase

javascript - 重写正则表达式而不进行积极的后视

javascript - 为什么 String.match(/\d*/) 返回一个空字符串?

javascript - 如何将所有 div 相互交换

javascript - 使用 javascript 动态更改导航填充

javascript - 棘手的 div 重叠

用于在电子邮件地址中查找点的 Python 正则表达式

javascript - JQuery 将值传递给接受事件对象参数的函数

javascript - 普通 JS 级联选择未知深度

regex - awk - 如果下一行与模式不匹配则删除行