正则表达式以找到最小可能匹配

时间:2014-09-29 14:56:38

标签: javascript regex

我使用JavaScript正则表达式/(<mos>[\s\S]*?<\/mos>)/g在日志文件中查找大致如下所示的XML块:

Entry 1: <mos>...</mos>
Entry 2: <mos>...</mos>

但是,有时日志记录过程遇到错误并且没有完成向文件写入条目,在这种情况下它看起来像这样:

Entry 1: <mos>Error!
Entry 2: <mos>...</mos>

当发生这种情况时,正则表达式匹配从条目1中的开始<mos>标记到条目2中的结束</mos>标记的所有内容,这会在以后处理XML时导致问题。

似乎以某种方式首先匹配结束标记然后回顾它们相应的开始标记会避免这种情况,但我不知道如何做到这一点,或者是否可以使用正则表达式。


澄清:由起始标记和结束标记分隔的块中的...可以包含换行符。

1 个答案:

答案 0 :(得分:2)

这个应该符合您的需求:

<mos>((?:[\s\S](?!<mos>))+?)</mos>

Regular expression visualization

Debuggex

的可视化

RegExr上的演示


如果使用JS正则表达式文字,请不要忘记转义斜杠。