首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript regex删除不匹配的关闭HTML标记?

Javascript regex删除不匹配的关闭HTML标记?
EN

Stack Overflow用户
提问于 2017-03-10 04:01:58
回答 2查看 1K关注 0票数 0

我正在尝试删除javascript中过多的结束标记以及之后的任何内容。

以下是一个可能的示例:

代码语言:javascript
复制
<div class="dummy">
    <div class="main">
        <div></div>
        <img src="a.jpg">
        <br>
        <img src="b.jpg />
        <strong>
            <span>text</span>
        </strong>
    </div>
</div>
    ***excessive tags below***
</div>
</div>
<div class="footer">
    text
</div>
</body>
</html>

关于如何有效地做这件事,有什么想法吗?我想提取的部分总是一个div,但问题是它可能有同样多的嵌套div,我不知道如何处理这个场景。

如果可以在多个步骤中完成,或者使用回调也是可以的,只要它能够工作。

编辑我的问题实际上比看上去容易。样本总是以我想要提取的div开始。所以,我所需要的就是找到匹配的结束标记,并过滤后面的任何内容。不管其他标签..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-10 05:19:03

代码语言:javascript
复制
data='<div class="dummy"><div class="main"><div></div><img src="a.jpg"><br><div></div><img src="b.jpg /><strong><span>text</span> </strong></div><div><div></div></div><div><div></div></div></div>***excessive tags below***</div></div><div class="footer">text</div></body></html>';



var starting_tags = [];
var closing_tags = [];

        var startIndex, index=0;
    var searchStrLen = 4;
    while ((index = data.indexOf('<div', startIndex)) > -1) {
        starting_tags.push(index);
        startIndex = index + searchStrLen;
    }
    index,startIndex=0;
    searchStrLen = 6;
     while ((index = data.indexOf('</div>', startIndex)) > -1) {
        closing_tags.push(index);
        startIndex = index + searchStrLen;
    }

    var nest_level=0;
    for (var i=0; i<closing_tags.length && nest_level<closing_tags.length && nest_level<=closing_tags.length; ++i) {
      for (var j=0+nest_level; j<starting_tags.length; ++j) {
                if (starting_tags[j]<closing_tags[nest_level]) 
            nest_level++;
      }
    }
result = data.substr(startIndex[starting_tags], closing_tags[nest_level-1]+6);    

console.log(nest_level);
console.log(starting_tags);
console.log(closing_tags);
console.log(result);

我解决了这个问题。上面的代码计算div嵌套的级别,如果发现过多的结束标记,则将其删除。

https://jsfiddle.net/89j7yakz/2/

票数 0
EN

Stack Overflow用户

发布于 2017-03-10 04:32:57

不要使用regex,根据我的理解,您希望保留虚拟类div和脚注类div,那么为什么不用这个替换主体呢?

例如。

代码语言:javascript
复制
var dummy = document.getElementsByClassName('dummy')[0];
var footer = document.getElementsByClassName('footer')[0]

var body = document.getElementsByTagName('body')[0];
body.innerHTML = '';
body.appendChild(dummy);
body.appendChild(footer);

https://jsfiddle.net/1kq11ry2/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42709986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档