使用正则表达式查找多行值并替换

我在内存中有以下字符串,想快速从中删除所有调试事件。我使用的正则表达式还会抓取其他事件,直到找到 DEBUG 事件。所以在这个示例中,它捕获了不止一个事件。在下面的 XML 中,它从开始到第三个事件进行捕获。它应该只为下面的这个输入选择第三个事件。


我不想在这里解析 XML。我只想从大量数据中删除调试事件(> 95% 的事件)。我试过使用解析器做同样的事情,但它在一个微型 SBC 上超时了。如果您有其他方法可以在 JavaScript 中(在浏览器之外)解决这个问题,我愿意接受任何建议。


输入:


<event type="app">

    <header>

        <info>1234</info>

    </header>

    <body>

        <severity type="INFO">message</severity>

    </body>

</event>

<event type="app">

    <header>

        <info>1235</info>

    </header>

    <body>

        <severity type="ERROR">message</severity>

    </body>

</event><event type="app">

    <header>

        <info>1236</info>

    </header>

    <body>

        <severity type="DEBUG">message</severity>

    </body>

</event>

<event type="app">

    <header>

        <info>1237</info>

    </header>

    <body>

        <severity type="ERROR">message</severity>

    </body>

</event>

正则表达式: <event type="app"(.|\n|\r\n)*?<severity type="DEBUG"(.|\n|\r\n)*?<\/event>


我在网上有这个样本:


https://regex101.com/r/JW3DWE/1


谢谢!


互换的青春
浏览 242回答 1
1回答

守着星空守着你

在处理 HTML/XML 时,您应该总是更喜欢使用解析器。对于这种特定情况,您可以像这样使用正则表达式:比赛:<event&nbsp;type="app">(?:(?!<\/event>)[\s\S])*<severity&nbsp;type="DEBUG">[\s\S]*?<\/event>并用任何东西代替。演示与解释
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript