2013-06-21 85 views
0

我試圖刪除腳本和HTML正文的內容,這就是我想出了到現在爲止正則表達式刪除<script>及其JavaScript內容

just_text = just_text.replace(/<\s*script[^>]*>(<\s*\/script[^>]*>|$)/ig, ''); 

如想它不工作,我仍然獲得內容。

你能幫我嗎?

謝謝

+3

你有沒有考慮使用,而不是常規承擔這一任務的HTML解析器表情?它們不適合處理HTML。 –

+0

*「從HTML正文中刪除腳本及其內容」*這是否意味着您正在修改實際頁面並且不僅僅具有HTML字符串? –

+0

@FrédéricHamidiyeap我需要一個正則表達式 –

回答

6

的回答這些問題始終是相同的:不要使用正則表達式。相反,解析HTML,修改DOM並在需要時將其序列化回HTML。

例子:

var container = document.createElement('div'); 
container.innerHTML = just_text; 

// find and remove `script` elements 
var scripts = container.getElementsByTagName('script'); 
for (var i = scripts.length; i--;) { 
    scripts[i].parentNode.removeChild(scripts[i]); 
} 

just_text = container.innerHTML; 

如果你想刪除的頁面本身script標籤,它基本上是相同的:

var scripts = document.body.getElementsByTagName('script'); 
for (var i = scripts.length; i--;) { 
    scripts[i].parentNode.removeChild(scripts[i]); 
} 
+0

+1非常有用:) – exexzian

+1

正確的答案,但我不知道我喜歡'我 - '作爲循環條件...爲什麼不簡單'while(scripts.length)scripts [0] .parentNode'等? – georg

+1

@ thg435:我有第一個。然後我記得訪問'.length'重新評估'NodeList'(更新它),我想避免這種情況。因此,以相反的順序遍歷列表似乎是最有意義的(不必與此循環設置,我只是喜歡它簡寫)。另一方面,也許訪問列表中的一個元素('腳本[我]')重新評估它,並沒有什麼可以通過這麼做;) –

相關問題