从JavaScript字符串中删除HTML标签

30

我有这段代码 :

var content = "<p>Dear sms,</p><p>This is a test notification for push message from center II.</p>";
and 我想从上述字符串中删除所有的 <p></p> 标签。只想显示没有 HTML 标签的字符串值,例如:
"Dear sms, This is a test notification for push message from center II."

我不认为这是重复的,因为它也被标记为Javascript。 - SaidbakR
我将HTML字符串保存在一个JavaScript变量中。我想从该变量中删除这些标记。 - krrr25
从文本中去除HTML标签的JavaScript代码副本:https://dev59.com/k3RA5IYBdhLWcg3wzhNY - Cerbrus
12个回答

65

为什么不让jQuery来做呢?

var content = "<p>Dear sms,</p><p>This is a test notification for push message from center II.</p>";

var text = $(content).text();

4
请记住,如果content中有类似于<div>的内容,那么在运行此代码后,它将变成一个标签。 - cdmckay
1
这不会删除 <br/> - Fabian S.
@PHPMaster5000:是的,它可以。你的HTML长什么样子? - Blender

32

这是我的解决方案,

function removeTags(){
    var txt = document.getElementById('myString').value;
    var rex = /(<([^>]+)>)/ig;
    alert(txt.replace(rex , ""));

}

3
谢谢,这是最好的答案,因为它是纯JavaScript,并且您的正则表达式处理了所有HTML标记。 - jacktrade
1
这个正则表达式的改进如下: (<([^>]+)>)|(<([^>]+)>)这将删除标准HTML标记以及任何转义标记。 - dukedevil294
请勿使用正则表达式处理HTML。这是一个错误,你很可能会因此受到严重的损失。HTML不是一种正则语言,即使是数千个字符长的正则表达式也不足以胜任。你需要一个真正的解析器,或者利用浏览器/DOM的函数。作为攻击者,我可以轻松地通过这两个示例获取HTML。 - AndrewF
正则表达式如何移除 以及其他内容? - Yash Sharma

9
使用纯JavaScript:
content = content.replace(/(<p>|<\/p>)/g, "");

空格和/或属性怎么办?例如 <p class="bla"></p > - Oscar Broman
1
回答了OP的确切问题,但如果标签具有属性,则正则表达式需要为/(<p[^>]*>|<\/p>)/g - HBP
在这里,变量似乎是生成的,我认为很容易知道我们需要删除哪些元素...即使有点复杂,我认为这种方法也可以奏效:它是根据提出的问题建立的基础,并且可以很容易地进行调整。 - Samuel Caillerie

4
您可以使用jQuery text() 获取不带html标签的纯文本。

演示

withoutP = $(content).text()

1
这段文字正在检查特殊字符。

var $string = '&lt;a href=&quot;link&quot;&gt;aaa&lt;/a&gt;';
var $string2 = '<a href="link">aaa</a>';
var $string3 = 'BBBBB';
var $string4 = 'partial<script';
var $string5 = 'has    spaces';

function StripTags(string) {

  var decoded_string = $("<div/>").html(string).text();
  return $("<div/>").html(decoded_string).text();

}

console.log(StripTags($string));
console.log(StripTags($string2));
console.log(StripTags($string3));
console.log(StripTags($string4));
console.log(StripTags($string5));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


1
var content = "a<br />";
var withoutP = $(content).text()
alert(withoutP )

这个无法使用 .text() 解决方案。


1
这段代码的功能是:使用正则表达式匹配所有的HTML标签,并将其替换为空字符串。

0

在标记中放置隐藏元素,或者使用jQuery创建它。使用此代码获取纯文本,而不会出现不完整标签的复杂情况,例如&lt;等。

content = $(hiddenElement).html($(hiddenElement).html(content).text()).text();

0
使用正则表达式:
var cleanContent = content.replace(/(<([^>]+)>)/ig,"");

0
你可以使用striptags模块来去除HTML并获取文本。这是一个非常简单和直接的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接