javascript - regexp - regular expression:




使用JS Regular Expression從html中刪除所有腳本標記 (8)

我想在pastebin中從這個html中刪除腳本標籤

http://pastebin.com/mdxygM0a

我嘗試使用下面的正則表達式

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

但它不會刪除html中的所有腳本標記。 它只刪除內聯腳本。 請我需要一個可以刪除所有腳本標籤的正則表達式(內聯和多行)。 如果對我的樣本http://pastebin.com/mdxygM0a進行測試,我們將非常感激

謝謝


/(?:(?!</ s \ w)<[^ <] </ s \ w * / gi; - 刪除任何組合中的任何序列


以下是各種shell腳本,您可以使用它們去除不同的元素。

# doctype
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/<\!DOCTYPE\s\+html[^>]*>/<\!DOCTYPE html>/gi" {} \;

# meta charset
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/<meta[^>]*content=[\"'][^\"']*utf-8[\"'][^>]*>/<meta charset=\"utf-8\">/gi" {} \;

# script text/javascript
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<script[^>]*\)\(\stype=[\"']text\/javascript[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

# style text/css
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<style[^>]*\)\(\stype=[\"']text\/css[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

# html xmlns
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<html[^>]*\)\(\sxmlns=[\"'][^\"']*[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

# html xml:lang
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<html[^>]*\)\(\sxml:lang=[\"'][^\"']*[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

嘗試使用正則表達式刪除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屬性插入,瀏覽器將不會執行腳本,並且可能永遠不會特別是因為元素未添加到文檔中。


嘗試這個:

var text = text.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/g, "")

在某些情況下,jQuery使用正則表達式刪除腳本標記,我很確定它的開發人員有這麼好的理由。 可能有些瀏覽器在使用innerHTML插入腳本時執行腳本。

這是正則表達式:

/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi

在人們開始哭泣之前“但HTML的正則表達是邪惡的”: 是的,它們是 - 但對於腳本標籤,由於特殊行為它們是安全的 - <script>部分可能根本不包含</script> ,除非它應該結束在這個位置。 因此很容易將它與正則表達式匹配。 但是,從快速查看,上面的正則表達式不會考慮結束標記內的尾隨空格,因此您必須測試</script等是否仍然有效。



每當你不得不求助於基於Regex的腳本標記清理時。 至少在結尾標記中添加一個空格

</script\s*>

否則就像是

<script>alert(666)</script   >

標記名有效後,因為尾隨空格會保留。






regex