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

这个正则是希望对一段文本中 未被某些指定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标签
是为什么呢?

阅读 2.8k
2 个回答

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

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
      });

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

换行符被匹配到了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题