在应用程序中,我收到一些HTML文本:由于应用程序无法显示(解释)HTML,因此我需要从服务器上收到的字符串中删除任何HTML标记和实体。
我尝试了以下内容,但是这个删除了HTML标记,但没有删除实体(例如& bnsp;):
stringFromServer.replace(/(<([^>]+)>)/ig,"");
感谢任何帮助。
免责声明:我需要一个纯JavaScript解决方案(没有JQuery,Underscore等)。
[更新] 我现在正在阅读你的所有答案,我忘了提到我使用的是JavaScript但是环境不是网页,所以我没有DOM
答案 0 :(得分:2)
您可以尝试这样的事情:
var placeholder = document.createElement('div');
placeholder.innerHTML = stringFromServer;
var theText = placeholder.innerText;
.innerText
仅从元素中抓取文本内容。
但是,由于看起来您根本无法访问任何DOM操作,因此您可能不得不使用某种HTML解析器,如下所示:
https://www.npmjs.org/package/htmlparser
http://ejohn.org/blog/pure-javascript-html-parser/
答案 1 :(得分:0)
不使用正则表达式或幻像div的解决方案可以是found on Mozilla's MDN。
我将代码放在JSfiddle here:
中var sMyString = "<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>";
var oParser = new DOMParser();
var oDOM = oParser.parseFromString(sMyString, "text/xml");
// print the name of the root element or error message
alert(oDOM.documentElement.nodeName == "parsererror" ?
"error while parsing" : oDOM.documentElement.textContent);
答案 2 :(得分:0)
或者,在新文档中解析HTML片段并从中进行dom操作(如果您希望将其与当前文档分开):
var tmpDoc=document.implementation.createHTMLDocument("");
tmpDoc.body.innerHTML="<a href='#'>some text</a><p style=''> more text</p>";
tmpDoc.body.textContent;
tmpDoc.body.textContent
评估为:
some text more text
答案 3 :(得分:-1)
stringFromServer.replace(/(<([^>]+)>|&[^;]+;)/ig, "")