使用Regex删除Javascript中的HTML标记

时间:2009-09-30 18:31:37

标签: javascript regex

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

<script type="text/javascript">

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

</script>

非常感谢!

12 个答案:

答案 0 :(得分:213)

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

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

console.log(result);

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

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

答案 1 :(得分:29)

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

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;

已清理后现在将包含:"some text and some more text"

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

詹姆斯

答案 2 :(得分:7)

这对我有用。

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

答案 3 :(得分:4)

TextAngular(WYSISYG Editor)就是这样做的。我也发现这是最一致的答案,这是NO REGEX。

ProductBarcode

答案 4 :(得分:2)

我的简单名为FuncJS的JavaScript库有一个名为“strip_tags()”的函数,它可以为您完成任务 - 无需您输入任何正则表达式。

例如,假设您要从句子中删除标签 - 使用此功能,您可以这样做:

strip_tags("This string <em>contains</em> <strong>a lot</strong> of tags!");

这会产生“这个字符串包含很多标签!”。

为了更好地理解,请阅读文档 GitHub FuncJS

此外,如果您愿意,请通过表单提供一些反馈。这对我很有帮助!

答案 5 :(得分:1)

您可以使用功能强大的库来管理字符串undrescore.string.js

_('a <a href="#">link</a>').stripTags()

=&GT; '一个链接'

_('a <a href="#">link</a><script>alert("hello world!")</script>').stripTags()

=&GT; '一个linkalert(“你好世界!”)'

不要忘记按以下方式导入此lib:

        <script src="underscore.js" type="text/javascript"></script>
        <script src="underscore.string.js" type="text/javascript"></script>
        <script type="text/javascript"> _.mixin(_.str.exports())</script>

答案 6 :(得分:0)

要在JS中使用正确的HTML清理程序,请参阅http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

答案 7 :(得分:0)

所选答案并不总能确保HTML被剥离,因为仍然可以通过制作如下字符串来构建无效的HTML字符串。

  "<<h1>h1>foo<<//</h1>h1/>"

此输入将确保剥离为您组合一组标记,并将导致:

  "<h1>foo</h1>"

另外,jquery的文本函数将剥离未被标记包围的文本。

这是一个使用jQuery的函数,但对于这两种情况应该更强大:

var stripHTML = function(s) {
    var lastString;

    do {            
        s = $('<div>').html(lastString = s).text();
    } while(lastString !== s) 

    return s;
};

答案 8 :(得分:0)

<html>
<head>
<script type="text/javascript">
function striptag(){
var html = /(<([^>]+)>)/gi;
for (i=0; i < arguments.length; i++)
arguments[i].value=arguments[i].value.replace(html, "")
}
</script>
</head> 
<body>
       <form name="myform">
<textarea class="comment" title="comment" name=comment rows=4 cols=40></textarea><br>
<input type="button" value="Remove HTML Tags" onClick="striptag(this.form.comment)">
</form>
</body>
</html>

答案 9 :(得分:0)

我的做法实际上是单线的。

该函数创建一个Range object,然后在Range中创建一个DocumentFragment,并将字符串作为子内容。

然后,它抓取片段的文本,删除所有“不可见” /零宽度字符,并修剪掉任何前导/后缀空白。

我意识到这个问题很旧,我只是以为我的解决方案是独一无二的,所以想分享。 :)

function getTextFromString(htmlString) {
    return document
        .createRange()
        // Creates a fragment and turns the supplied string into HTML nodes
        .createContextualFragment(htmlString)
        // Gets the text from the fragment
        .textContent
        // Removes the Zero-Width Space, Zero-Width Joiner, Zero-Width No-Break Space, Left-To-Right Mark, and Right-To-Left Mark characters
        .replace(/[\u200B-\u200D\uFEFF\u200E\u200F]/g, '')
        // Trims off any extra space on either end of the string
        .trim();
}

var cleanString = getTextFromString('<p>Hello world! I <em>love</em> <strong>JavaScript</strong>!!!</p>');

alert(cleanString);

答案 10 :(得分:0)

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

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

答案 11 :(得分:-1)

正如其他人所说,正则表达式不起作用。花一点时间阅读我的article,了解为什么你不能,不应该尝试用正则表达式解析html,这是你在尝试从源字符串中删除html时所做的。