从来自服务器的字符串中删除HTML标记和实体

时间:2014-11-04 08:08:50

标签: javascript html regex string

在应用程序中,我收到一些HTML文本:由于应用程序无法显示(解释)HTML,因此我需要从服务器上收到的字符串中删除任何HTML标记和实体。

我尝试了以下内容,但是这个删除了HTML标记,但没有删除实体(例如& bnsp;):

stringFromServer.replace(/(<([^>]+)>)/ig,"");

感谢任何帮助。

免责声明:我需要一个纯JavaScript解决方案(没有JQuery,Underscore等)。

[更新] 我现在正在阅读你的所有答案,我忘了提到我使用的是JavaScript但是环境不是网页,所以我没有DOM

4 个答案:

答案 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, "")