javascript - 正则表达式查找最小可能的匹配

标签 javascript regex

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

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

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

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

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

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

<小时/>

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

最佳答案

这个应该适合您的需求:

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

Regular expression visualization

Debuggex 的可视化

RegExr 上的演示

<小时/>

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

关于javascript - 正则表达式查找最小可能的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102838/

相关文章:

javascript - 军用(24小时)和民用(23 :59) format)时间匹配的正则表达式

javascript - 使用 javascript 填充多个字段

javascript - Q.all 链式序列

正则表达式不捕获写成单词的数字

javascript - 在 JavaScript 中将哈希 url 解析为对象?

python - 使用 Python 查找文件大小的字符串中数组字符串的频率

javascript - 如何使用 Prototype 在两个 DIV 之间创建分隔符

javascript - 将选项卡链接移至博客的右侧

JavaScript 读取文件

C# 正则表达式替换但仅替换编号的子组