我有下面的正則表達式迭代通過一個字符串,然後我建立一個腳本網址的數組。如果腳本也有指定的類型或ID,這是否會中斷?有沒有辦法忽略腳本標記(如id,class,type等)上的某些arrtibutes?用正則表達式忽略元素屬性
var regSrc = /<script.*?src="(.*?)"><\/script>/gmi;
我有下面的正則表達式迭代通過一個字符串,然後我建立一個腳本網址的數組。如果腳本也有指定的類型或ID,這是否會中斷?有沒有辦法忽略腳本標記(如id,class,type等)上的某些arrtibutes?用正則表達式忽略元素屬性
var regSrc = /<script.*?src="(.*?)"><\/script>/gmi;
Don't use regex to parse HTML。改爲使用DOM。它不那麼痛苦:
function get_script_src_from_string (INPUT_STRING) {
var tempDiv = document.createElement('div');
tempDiv.innerHTML = INPUT_STRING;
var scripts = tempDiv.getElementsByTagName('script');
var script_urls = [];
for (var i=0; i<scripts.length; i++) {
script_urls.push(scripts[i].src);
}
return script_urls;
}
適用於所有瀏覽器,更容易理解,沒有邊界情況。
由於腳本只有在元素被添加到document
時才被下載,如果您從未使用appendChild
臨時div,它將不會被下載。
元素不在在這種情況下,他們是用一個字符串進來的。是的,這太可怕了,但這是我正在研究的項目。 – user1572796 2014-09-26 22:20:59
看看我的代碼。 input_string是一個不在DOM中的字符串 – slebetman 2014-09-26 22:21:32
您的Web瀏覽器包含一個非常健壯的HTML解析器,它被稱爲「innerHTML」。用它。 – slebetman 2014-09-26 22:22:30
試試這個正則表達式:
/<script.*src="([^"]*).*><\/script>/
它會匹配任何腳本標記(與SRC),並忽略所有屬性,但SRC
/<script.*?src="([^"]*)"[^>]*><\/script>/gmi
幾乎它:不使用? * 此外,有了這個正則表達式,':':只有second.js會被捕獲 – laruiss 2014-09-26 22:32:33
只爲原則(和樂趣)的緣故,我要把我的正則表達式:
var regSrc = /<script(:? [a-z]+="[^"]*"| [a-z]+='[^']*')* src="([^"]*)"[^>]*><\/script>/gmi;
但@slebetman答案是正確的,應予以確認。 (如果這個正則表達式用簡單的引號src='path/to/whatever.js'
寫成,那麼這個正則表達式不會捕獲到src,但看起來比已經給出的更安全)。
謝謝,可能需要針對IE8的正則表達式 – user1572796 2014-09-29 23:49:53
我沒有使用jquery,因爲它必須適用於各種現代化的網站和應用程序,jquery正在出路。 – user1572796 2014-09-26 22:00:54
有點強,但足夠公平:)記得jQuery的主要哲學是簡單性和x-browser兼容性。我認爲這會持續一段時間。 – ne1410s 2014-09-26 22:01:56
@ ne1410s你爲什麼不用英文寫作? – melancia 2014-09-26 22:13:59