首页 文章

使用Regex删除Javascript中的HTML标记

提问于
浏览
92

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

<script type="text/javascript">

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

</script>

非常感谢!

10 回答

  • 2

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

  • 0

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

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

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

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

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

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

    詹姆士

  • -1

    这对我有用 .

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

    我的 simple 名为FuncJS的JavaScript库有一个名为"strip_tags()"的函数,可以为您完成任务 - 无需您输入任何正则表达式 .

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

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

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

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

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

  • 0

    TextAngular(WYSISYG Editor)就是这样做的 . 我也发现这是最一致的答案,这是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;
    }
    
  • 2

    你可以使用一个功能强大的库来管理String undrescore.string.js

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

    ''链接'

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

    '一个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>
    
  • 197
    <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>
    
  • 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;
    };
    
  • 1

    像其他人所说,正则表达式不会起作用 . 花点时间阅读我的article,了解为什么你不能,也不应该尝试用正则表达式解析html,这就是你试图从你的源字符串中删除html的原因 .

相关问题