获取两个短语之间的单独匹配的JavaScript正则表达式
我可以使用什么正则表达式模式来解析以下文本:获取两个短语之间的单独匹配的JavaScript正则表达式,javascript,regex,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
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
-问题是它只返回一个包含三个部分的结果。您的正则表达式看起来不错,但可能(^ |\n)(Mission | Task)
已经满足您的需要(查找所有以“任务”或“任务”开头的行。原因是我认为您的最终目标不需要与整个段落匹配-见下文)。您的主要问题可能是您没有使用:
另一个问题是(我认为)您正在使用XY。我认为上面的正则表达式和replace
在这里会更容易,但由于您希望每个匹配项都有不同的替换项,因此不能仅使用:
您可以使用函数和全局变量解决此问题:
var index = 1;
yourText.replace(pattern,function(x){ return "P"+(index++)+"\n"+x;})
注意,/g
将导致replace处理字符串中的所有匹配项。如果仍要使用您的模式,只需添加/g
编辑
忘记发布。这是对上一个答案的完全重写,因为您的输入与开始时显示的内容大不相同 您需要一个简单的正则表达式来匹配两个字符串之间的字符串:
/^(Mission|Task)\b[\s\S]*?^End \1$/mg
下面是同一个正则表达式的示例:
/^(Mission|Task)\b.*(?:\r?\n(?!End \1).*)*\r?\nEnd \1$/gm
见
详细信息:
-行的开头^
-要么(任务|任务)\b
要么任务
全字任务
-任何0+字符,尽可能少到第一个字符[\s\s]*?
-^End\1$
,空格和单词作为一整行捕获到组1中End
split
函数。使用双换行符拆分:s.split(“\n\n”)
。或者使用s.split(/^(?=Task | Mission)/m)
好吧!我打算找出具有“任务…结束任务”或“任务…结束任务”结构的文本块。块外有一些不必要的字符串与结果不匹配。我已检查了您的新输入,并相应地更新了答案。
/^(Mission|Task)\b[\s\S]*?^End \1$/mg
/^(Mission|Task)\b.*(?:\r?\n(?!End \1).*)*\r?\nEnd \1$/gm