使用 JavaScript 从 HTML 字符串中提取文本

IT技术 javascript html string text extract
2021-02-23 05:53:39

我正在尝试使用 JS 函数(字符串作为参数传递)获取 HTML 字符串的内部文本。这是代码:

function extractContent(value) {
  var content_holder = "";

  for (var i = 0; i < value.length; i++) {
    if (value.charAt(i) === '>') {
      continue;
      while (value.charAt(i) != '<') {
        content_holder += value.charAt(i);
      }
    }

  }
  console.log(content_holder);
}

extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>");

问题是在console(*content_holder* stays empty). 我认为问题是由===操作员引起的

6个回答

创建一个元素,在其中存储 HTML,并获取它的textContent

function extractContent(s) {
  var span = document.createElement('span');
  span.innerHTML = s;
  return span.textContent || span.innerText;
};
    
alert(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>"));


这是一个允许您在节点之间有空格的版本,尽管您可能只希望对块级元素使用:

function extractContent(s, space) {
  var span= document.createElement('span');
  span.innerHTML= s;
  if(space) {
    var children= span.querySelectorAll('*');
    for(var i = 0 ; i < children.length ; i++) {
      if(children[i].textContent)
        children[i].textContent+= ' ';
      else
        children[i].innerText+= ' ';
    }
  }
  return [span.textContent || span.innerText].toString().replace(/ +/g,' ');
};
    
console.log(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>.  Nice to <em>see</em><strong><em>you!</em></strong>"));

console.log(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>.  Nice to <em>see</em><strong><em>you!</em></strong>",true));

delete span 一事无成。
2021-04-26 05:53:39
不,不需要空格:) 抱歉没有提到它!
2021-04-27 05:53:39
@torazaburo,谢谢,我不确定。已编辑。
2021-04-29 05:53:39
输出HelloW3C- 真的是 OP 想要的吗?不是Hello W3C吗?
2021-05-05 05:53:39
添加了可以在节点之间添加空格的版本。
2021-05-15 05:53:39

一行(更准确地说,一个语句)版本:

function extractContent(html) {

    return new DOMParser().parseFromString(html, "text/html") . 
        documentElement . textContent;

}
希望这可以在 nodejs 上工作,但它没有。最终使用npmjs.com/package/html2plaintext
2021-04-17 05:53:39
我们可以使用这种方法通过 id 提取一些内容,例如:document.getElementById 吗?
2021-04-20 05:53:39
@shariqueansari,DOMParser是“实验性技术”,但可能会添加到规范中。它的 HTML 支持适用于 IE10+。我原来的答案适用于 IE9+,但我现在已经更新它以支持 IE8。
2021-04-30 05:53:39
DOMParser 现在有广泛的支持,请参阅caniuse.com/#search=domparser
2021-05-07 05:53:39
不错的答案+1,但是您的答案和Rick Hitchcock答案有什么区别
2021-05-16 05:53:39

textContext是一种非常好的实现预期结果的技术,但有时我们不想加载 DOM。如此简单的解决方法将遵循正则表达式:

let htmlString = "<p>Hello</p><a href='http://w3c.org'>W3C</a>"
let plainText = htmlString.replace(/<[^>]+>/g, '');
@Kelly 您所指的符号是正则表达式它有点像用于解析文本的迷你编程语言。这是您可以了解有关每个符号的更多信息的链接:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/...
2021-04-24 05:53:39
它本质上说,找到并删除每个<拥有的东西,是不是>它和之间>
2021-04-27 05:53:39
我知道这是一个非常古老的评论,但你能解释一下表达式 /<[^>]+>/g 的含义吗?我无法理解每个字符的含义。
2021-04-29 05:53:39
不同情况下的不同技术,这是适合我的情况的正确方法,Telegram 的机器人开发不需要 innerHTML 或 Web 开发中需要的东西。
2021-05-11 05:53:39
最有帮助的正则表达式,编码人员最好的工具/迷你语言之一。
2021-05-15 05:53:39

使用此正则表达式删除 html 标签并仅将内部文本存储在 html 中

它显示 HelloW3c 只检查它

var content_holder = value.replace(/<(?:.|\n)*?>/gm, '');
请给我一个理由好吗?
2021-04-21 05:53:39
如果您打算使用正则表达式,那么更简单的版本是/<[\s\S]*?>/, 或/<[^]*?>/. 你的m旗帜一无所获;它涉及到的行为^$
2021-05-06 05:53:39

试试这个:-

<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
function extractContent(value){
        var div = document.createElement('div')
        div.innerHTML=value;
        var text= div.textContent;            
        return text;
}
window.onload=function()
{
   alert(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>"));
};
</script>
</body>
</html>

你测试过这个吗?它未能按应有的方式提取“W3C”。
2021-04-18 05:53:39
请尝试使用 string 的解决方案Hello, <p>Buggy<i>World</i></p>
2021-04-18 05:53:39