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

查看:101
本文介绍了javascript - 为什么我这个正则表达式会和预想的匹配结果不符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

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

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

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

这篇关于javascript - 为什么我这个正则表达式会和预想的匹配结果不符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆