【问题标题】:How can I get only tags of html?如何仅获取 html 的标签?
【发布时间】:2015-05-23 16:45:15
【问题描述】:

如何使用 NodeJS 仅获取 HTML 标签?

我有这个:

<html>
<head>
Hi
</head>
<body>
<center id="fantastic">
Hi , hello
</center>
</body>
</html>

我想删除 Hi 和 Hi , Hello 并只获取标签,我也想删除 id="fantastic"。 任何的想法?有正则表达式吗?

【问题讨论】:

  • str.replace(/&gt;([\w\W]+?)&lt;/g,"&gt;&lt;"); 将适用于有效标记
  • @vihan1086 - 为什么在原始问题中不存在任何内容时更改源 HTML 以添加缩进。这是一个关于解析和修改某些特定 HTML 源的问题,因此更改 OP 提供的输入似乎不合适。
  • 感谢@dandavis 的回复,但如果我有 如何删除并只获取 所以删除 href= “something.com”?
  • var ok = result.replace(/&gt;([\w\W]+?)&lt;/g,"&gt;&lt;"); ok= ok.replace(/ ([\w\W]+?) &gt;/g,"&gt;"); ok= ok.replace(/ ([\w\W]+?)&gt;/g,"&gt;"); 我做了这个,但我不喜欢也不知道是否适用于所有事情。有什么改进的办法吗?

标签: javascript html node.js parsing tags


【解决方案1】:

假设您在 Javascript 字符串中有源 HTML,并且它是合法的 HTML,并且 HTML 属性不包含“>”或“

var source = "your html here";

var result = source.match(/<.*?>/g).map(function(item) {
    return item.replace(/<\s+/, "<").replace(/\s.*?(\/?>)$/, "$1");
}).join("");

工作演示:http://jsfiddle.net/jfriend00/6q0gyugd/

这使用正则表达式将 HTML 标签隔离到一个数组中,然后使用.map() 遍历该数组以删除标签中的任何前导空格,然后从每个标签中删除任何属性,然后将它们重新连接到一个 HTML 字符串。


要在任何可能的合法 HTML 中保持最健壮,您最好只使用一个实际的 HTML 解析器(它可能比任何正则表达式都更智能)来解析实际的 HTML 标签,然后遍历解析树输出只是标签。

【讨论】:

    【解决方案2】:

    您可以尝试使用 cheerio - https://github.com/cheeriojs/cheerio 之类的库

    【讨论】:

    • 我不想要解决方案,我只想要一个建议,为什么我将它用于该任务。
    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多