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

IT技术 javascript regex
2021-01-27 18:07:18

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

<script type="text/javascript">

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

</script>

非常感谢!

6个回答

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

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

console.log(result);

如果您愿意使用诸如jQuery 之类的库,您可以简单地执行以下操作:

console.log($('<p>test</p>').text());
这行不通。具体来说,它会在短标签上失败:is-thought.co.uk/book/sgml-9.htm#SHORTTAG
2021-03-13 18:07:18
如果 a>包含在属性值中,正则表达式解决方案也会失败像这样<div data="a + b > c">
2021-03-16 18:07:18
尝试在"<img src=bogus onerror=alert(1337)". 第一个失败是因为 HTML 解析器不要求最后一个标签被 a 关闭>,第二个失败是因为图像加载甚至在解析的 DOM 树被添加到 DOM 之前就开始了,并$('<img ...>')调用了 HTML 解析器。
2021-03-28 18:07:18
为什么要将正则表达式包装在字符串中?var regex = /(<([^>]+)>)/ig;
2021-04-01 18:07:18
这是一个老问题,但我会在这里发布:jsperf.com/regex-replace-vs-jquery-text
2021-04-06 18:07:18

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

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,即使在更复杂的情况下也不应该让您失望。

嗨。好吧,基本上它所做的就是创建一个新的 DIV,将内部 HTML 内容设置为提供的任何内容(我认为这意味着解析任何 HTML 代码),然后请求 div 的所有文本内容,这会忽略所说的 HTML .
2021-03-16 18:07:18
@Adrian 最后一行将选择输出temp.textContent是否存在,如果不存在则仅尝试temp.innerText您的浏览器应该有前者,但对于没有的浏览器,则使用后者:)
2021-03-16 18:07:18
在我的浏览器中,对象没有字段 innerText
2021-03-26 18:07:18
这个解决方案对我来说失败了,我正在使用@kolkov Text Editor for Angular。
2021-03-31 18:07:18
在再次研究这个之后(那里有很多答案)。我正在使用这种方法。这与 text-angular 中使用的方法相同。他们添加了一些额外的东西,我已经包含在这个线程中
2021-04-08 18:07:18

这对我有用。

   var regex = /(&nbsp;|<([^>]+)>)/ig
      ,   body = tt
     ,   result = body.replace(regex, "");
       alert(result);
+1 谢谢。这个班轮醒来非常适合我的需要。console.log( my_html.replace(/(&nbsp;|<([^>]+)>)/ig, "") );
2021-04-12 18:07:18

下面是 TextAngular(WYSISYG 编辑器)是如何做到的。我还发现这是最一致的答案,即 NO REGEX。

@license textAngular
Author : Austin Anderson
License : 2013 MIT
Version 1.5.16
// turn html into pure text that shows visiblity
function stripHtmlToText(html)
{
    var tmp = document.createElement("DIV");
    tmp.innerHTML = html;
    var res = tmp.textContent || tmp.innerText || '';
    res.replace('\u200B', ''); // zero width space
    res = res.trim();
    return res;
}

这是 HTML 标记和   等的解决方案,您可以删除和添加条件以获取没有 HTML 的文本,您可以将其替换为任何内容。

convertHtmlToText(passHtmlBlock)
{
   str = str.toString();
  return str.replace(/<[^>]*(>|$)|&nbsp;|&zwnj;|&raquo;|&laquo;|&gt;/g, 'ReplaceIfYouWantOtherWiseKeepItEmpty');
}
"html_string".replace(/<[^>]*(>|$)| |"|'|‌|»|«|>/g, ''); --> 添加 "|'
2021-03-14 18:07:18
谢谢!我还要加上“"” -> "html_string".replace(/<[^>]*(>|$)| |"|‌|»|«|>/g, ''); 干杯!
2021-03-27 18:07:18