小编典典

使用JS正则表达式从html删除所有脚本标签

javascript

我想在pastebin上将脚本标签从此html中剥离

http://pastebin.com/mdxygM0a

我尝试使用以下正则表达式

html.replace(/<script.*>.*<\/script>/ims, " ")

但是它不会删除html中的所有脚本标签。它仅删除嵌入式脚本。请我需要一个可以删除所有脚本标签(行内和多行)的正则表达式。如果对我的样本http://pastebin.com/mdxygM0a进行测试,将不胜感激

谢谢


阅读 775

收藏
2020-05-01

共1个答案

小编典典

尝试使用正则表达式删除HTML标记是有问题的。您不知道其中包含什么脚本或属性值。一种方法是将其作为div的innerHTML插入,删除所有脚本元素并返回innerHTML,例如

  function stripScripts(s) {
    var div = document.createElement('div');
    div.innerHTML = s;
    var scripts = div.getElementsByTagName('script');
    var i = scripts.length;
    while (i--) {
      scripts[i].parentNode.removeChild(scripts[i]);
    }
    return div.innerHTML;
  }

alert(
 stripScripts('<span><script type="text/javascript">alert(\'foo\');<\/script><\/span>')
);

请注意,目前,如果使用innerHTML属性插入浏览器,则浏览器将不会执行脚本,并且可能永远不会执行该脚本,特别是因为未将元素添加到文档中。

2020-05-01