使用正则expression式在Javascript中删除HTML标签

我试图从Javascript中的string中删除所有的HTML标签。 下面我有什么…我不明白为什么它不工作….任何知道我在做什么错?

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

非常感谢!

试试这个,注意HTML的语法对于正则expression式来说太复杂了100%的时间是正确的:

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

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

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

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

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

詹姆士

这对我有效。

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

简单的 JavaScript库叫做FuncJS,它有一个名为“strip_tags()”的函数,它可以为你完成任务,而不需要input任何正则expression式。

例如,假设你想从一个句子中删除标签 – 用这个函数,你可以这样做:

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

这将产生“这个string包含很多标签!”。

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

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

你可以使用一个强大的库pipe理string,这是undrescore.string.js

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

>'一个链接'

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

=>'linkalert(“hello world!”)'

不要忘记导入这个库如下:

  <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> 

这是TextAngular(WYSISYG编辑器)如何做的。 我也发现这是最一致的答案,这是没有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; } 

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

 <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> 

所选的答案并不总是确保HTML被剥离,因为仍然可以通过构build如下的string来构build无效的HTMLstring。

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

该input将确保剥离为您组合一组标签,并将导致:

  "<h1>foo</h1>" 

另外jquery的文本function将去除不被标签包围的文本。

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

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

像其他人所说,正则expression式不起作用。 花点时间阅读我的文章 ,为什么你不能也不应该尝试用正则expression式parsinghtml,这是当你试图剥离你的源string中的HTML时你正在做的事情。