为什么我这个正则表达式会和预想的匹配结果不符?

发布于 2022-09-05 05:37:18 字数 1358 浏览 19 评论 0

这个正则是希望对一段文本中 未被某些指定html标签包裹的 段落(换行) 用p标签包裹
指定HTML标签:<div><blockquote> || </div></div>
输入整体看起来是这样:

const content = 
一个段落\换行
(空内容直接换行)
另一个段落\换行
<div>(此处没有换行,为了方便看)
    <blockquote>......一段引用......</blockquote>
    <div>一些额外的信息</div>
</div>

期望结果:

<p>一个段落</p>
<p></p>
<p>另一个段落</p>
<div>(此处没有换行,为了方便看)
    <blockquote>......一段引用......</blockquote>
    <div>一些额外的信息</div>
</div>

代码如下:

let isRegMatchingQuote = false; //是否已经匹配到'<div><blockquote>'
content = content.replace(/(.*)/gm, (matched, param, offset, string) => {
        const flag = matched.match(/<div><blockquote>|</div></div>/);
        if(flag) isRegMatchingQuote = !isRegMatchingQuote;
        if(!isRegMatchingQuote) return `<p>${param}</p>`
        return matched
      });

实际结果:

<p>一个段落</p><p></p>
<p></p>
<p>另一个段落</p><p></p>
<div>(此处没有换行,为了方便看)
    <blockquote>......一段引用......</blockquote>
    <div>一些额外的信息</div>
</div>

每次后面都会多出一组P标签
是为什么呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

愿得七秒忆 2022-09-12 05:37:18

修改完并达到预期的代码如下:

let isRegMatchingQuote = false; //是否已经匹配到'<div><blockquote>'
content = content.replace(/^.*/gm, (matched, param, offset, string) => {
        const flag = matched.match(/<div><blockquote>|</div></div>/);
        if(flag) isRegMatchingQuote = !isRegMatchingQuote;
        if(!isRegMatchingQuote) return `<p>${param}</p>`
        return matched
      });

好像换行与新行之间有什么东西,有兄弟知道吗?

呢古 2022-09-12 05:37:18

换行符被匹配到了?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文