使用Regex删除Javascript中的HTML标记

Gab*_*abe 102 javascript regex

我试图从Javascript中的字符串中删除所有的html标签.继承人我所拥有的......我无法弄清楚为什么它不起作用......任何人都知道我做错了什么?

<script type="text/javascript">

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

</script>
Run Code Online (Sandbox Code Playgroud)

非常感谢!

kar*_*m79 222

试试这个,注意HTML的语法太复杂了,正规表达式在100%的时间都不正确:

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

console.log(result);
Run Code Online (Sandbox Code Playgroud)

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

console.log($('<p>test</p>').text());
Run Code Online (Sandbox Code Playgroud)

  • 这是一个老问题,但我会在这里发布:http://jsperf.com/regex-replace-vs-jquery-text (4认同)
  • 为什么要将正则表达式包装在字符串中?var regex = /(<([^>] +)>)/ ig; (2认同)
  • 尝试在"<img rel="nofollow noreferrer" src = bogus onerror = alert(1337)"中运行它.第一个失败是因为HTML解析器不要求最后一个标签被`>`关闭,第二个失败因为图像加载甚至在解析的DOM树被添加到DOM之前就开始了,并且`$('<img rel="nofollow noreferrer" ...>')`调用HTML解析器. (2认同)

jsd*_*sdw 32

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

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;
Run Code Online (Sandbox Code Playgroud)

消毒后现在将包含: "some text and some more text"

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

詹姆士

  • 我第一次尝试这个,但它受到 xss 注入。如果您尝试清理 `&lt;img src=fake onerror=alert("dan​​gerous")&gt;`,您将运行 `onerror` js。 (4认同)

Sah*_*kar 11

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

convertHtmlToText(passHtmlBlock)
{
   str = str.toString();
  return str.replace(/<[^>]*(>|$)|&nbsp;|&zwnj;|&raquo;|&laquo;|&gt;/g, 'ReplaceIfYouWantOtherWiseKeepItEmpty');
}
Run Code Online (Sandbox Code Playgroud)


小智 8

这对我有用.

   var regex = /(&nbsp;|<([^>]+)>)/ig
      ,   body = tt
     ,   result = body.replace(regex, "");
       alert(result);
Run Code Online (Sandbox Code Playgroud)

  • +1谢谢.这个衬垫按照我的需要而完美.`console.log(my_html.replace(/(&nbsp; | <([^>] +)>)/ ig,""));` (5认同)

Ren*_*com 5

这是TextAngular(WYSISYG编辑器)的工作方式。我还发现这是最一致的答案,那就是“无正则表达式”。

@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;
}
Run Code Online (Sandbox Code Playgroud)