沒有人知道一個很好的正則表達式來從html中移除事件。Javascript正則表達式[Remove Events]
例如字符串:
"<h1 onmouseover="top.location='http://www.google.com">Large Text</h1>
變爲 "<h1>Large Text</h1>
所以HTML標記將得以保留,但喜歡的onmouseover,的onmouseout,的onclick等事件都被刪除。
在此先感謝!
沒有人知道一個很好的正則表達式來從html中移除事件。Javascript正則表達式[Remove Events]
例如字符串:
"<h1 onmouseover="top.location='http://www.google.com">Large Text</h1>
變爲 "<h1>Large Text</h1>
所以HTML標記將得以保留,但喜歡的onmouseover,的onmouseout,的onclick等事件都被刪除。
在此先感謝!
如何:從註釋
data.replace(/ on\w+="[^"]*"/g, '');
編輯:
這是爲了在您的標記作爲一個時間的事情運行。如果你想在頁面執行期間動態地移除事件,那是一個稍微不同的故事。像jQuery JavaScript庫使得它非常容易,但:
$('*').unbind();
編輯:
僅在標籤限制這是一個困難得多。我不確定它可以用一個單一的正則表達式來完成。然而,這應該,如果沒有人能拿出一個讓你:
var matched;
do
{
matched = false;
data = data.replace(/(<[^>]+)(on\w+="[^"]*")+/g,
function(match, goodPart)
{
matched = true;
return goodPart;
});
} while(matched);
編輯:
我在寫一個正則表達式這個投降。必須有一些方法來檢查比賽的上下文,而不是實際捕獲比賽中標籤的開始,但是我的RegEx-fu不夠強大。這是最優雅的解決方案我要拿出:
data = data.replace(/<[^>]+/g, function(match)
{
return match.replace(/ on\w+="[^"]*"/g, '');
});
非常好的答案。只是對詹姆斯的反饋,它不會刪除已經放置在不顯眼的html上的事件,也不會刪除通過href ='javascript:function()'觸發的一些點擊事件。 – 2010-10-02 01:10:29
謝謝你回答Ian。我只是更換原始html,所以正則表達式看起來不錯。然而,有沒有一種方法來指定它,以便它只有在字符串在標籤內時才匹配?目前正則表達式將取代「onclick事件可以寫成onclick =」某事「」到「onclick事件可以寫成」。有任何想法嗎?謝謝 – 2010-10-02 01:34:44
我很欣賞努力!我認爲你的最終嘗試對我來說是完美的。謝謝 :) – 2010-10-02 05:51:39
這裏是一個純JS的方式來做到這一點:
function clean(html) {
function stripHTML(){
html = html.slice(0, strip) + html.slice(j);
j = strip;
strip = false;
}
function isValidTagChar(str) {
return str.match(/[a-z?\\\/!]/i);
}
var strip = false; //keeps track of index to strip from
var lastQuote = false; //keeps track of whether or not we're inside quotes and what type of quotes
for(var i=0; i<html.length; i++){
if(html[i] === "<" && html[i+1] && isValidTagChar(html[i+1])) {
i++;
//Enter element
for(var j=i; j<html.length; j++){
if(!lastQuote && html[j] === ">"){
if(strip) {
stripHTML();
}
i = j;
break;
}
if(lastQuote === html[j]){
lastQuote = false;
continue;
}
if(!lastQuote && html[j-1] === "=" && (html[j] === "'" || html[j] === '"')){
lastQuote = html[j];
}
//Find on statements
if(!lastQuote && html[j-2] === " " && html[j-1] === "o" && html[j] === "n"){
strip = j-2;
}
if(strip && html[j] === " " && !lastQuote){
stripHTML();
}
}
}
}
return html;
}
-1(X)HTML是不是一個正規的語言。如果你這樣做是爲了某種「消毒」,那麼特別不安全 - 可能會有某些邊緣情況被某些標記湯解析器解析爲JavaScript;一個明顯的候選人是IE的條件評論。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-10-02 02:30:38