使用正则表达式删除 Javascript 中的 HTML 标记

2022-08-30 04:38:19

我正在尝试从Javascript中的字符串中删除所有html标签。这是我所拥有的...我不知道为什么它不起作用...谁知道我做错了什么?

<script type="text/javascript">

var regex = "/<(.|\n)*?>/";
var body = "<p>test</p>";
var result = body.replace(regex, "");
alert(result);

</script>

多谢!


答案 1

试试这个,注意HTML的语法太复杂了,正则表达式不可能100%正确:

var regex = /(<([^>]+)>)/ig
,   body = "<p>test</p>"
,   result = body.replace(regex, "");

console.log(result);

如果你愿意使用像jQuery这样的库,你可以简单地这样做:

console.log($('<p>test</p>').text());

答案 2

这是一个古老的问题,但我偶然发现了它,并认为我会分享我使用的方法:

var body = '<div id="anid">some <a href="link">text</a></div> and some more text';
var temp = document.createElement("div");
temp.innerHTML = body;
var sanitized = temp.textContent || temp.innerText;

sanitized现在将包含:"some text and some more text"

很简单,不需要jQuery,即使在更复杂的情况下,它也不应该让你失望。

警告

这无法安全地处理用户内容,因为它容易受到脚本注入的影响。例如,运行以下命令:

var body = '<img src=fake onerror=alert("dangerous")> Hello';
var temp = document.createElement("div");
temp.innerHTML = body;
var sanitized = temp.textContent || temp.innerText;

导致发出警报。