求个正则,内标签匹配

有数据:

<h2>概要</h2>
    <h3>编号:2016-221395</h3>
    <h3>标题:Discuz</h3>
    <h3>相关:Discuz</h3>
    <h3>时间:2016-09-20 08:40</h3>
    <h3>类型:设计规范</h3>
    <h3>状态:被忽略</h3>
    <h3>Tags标签:</h3>
<h2>具体详情</h2>
    <h3>更新状态:</h3>
    <p>2016-06-21:通知处理中<br>2016-06-22: 被忽略<br></p>
    <h3>简要描述:</h3>
    <p>需要确认。</p>
    <h3>详细说明:</h3>
    <h3>证明:</h3>
    <h3>方案:</h3>
<h2>回应</h2>
<div>
    <h3>回应:</h3>
    <h3>最新状态:</h3>
    <p>暂无</p>
</div>

需要将下面这部分h3替换成p标签。感谢!

    <h3>编号:2016-221395</h3>
    <h3>标题:Discuz</h3>
    <h3>相关:Discuz</h3>
    <h3>时间:2016-09-20 08:40</h3>
    <h3>类型:设计规范</h3>
    <h3>状态:被忽略</h3>
    <h3>Tags标签:</h3>

<\/h2>(<h3>(.*?)<\/h3>)<h2>具体详情,只能取到一条h3内容。
<h3>(.*?)<\/h3>则变成了所有h3内容,但我只要上面那部分h3。

我的思路是取出概要</h2>………………<h2>具体详情的内容,再遍列h3每个的内容,然后用p包含内容。但一直不行。

阅读 2.2k
3 个回答

.replace(/h3/g, 'p')

String.prototype.replaceTimes = function(search, replace, times) {
   let num = 0;
   if (num >= times) return this;
   return this.replace(search, function(...args) {
        if (num++ > times) return args[0];
        return replace(...args); 
   });
}

一直以为有类似这种的函数, 搜索替换指定次数, 当前函数只适用于replace为函数且替换次数明确

str = '...'
str.replace(/(?<=(</h2>))<h3>.*?</h3>(?=(<h2>))/g,function(str){return str.replace(/h3/g,'p')})

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