2014-09-26 28 views
-1

我有下面的正則表達式迭代通過一個字符串,然後我建立一個腳本網址的數組。如果腳本也有指定的類型或ID,這是否會中斷?有沒有辦法忽略腳本標記(如id,class,type等)上的某些arrtibutes?用正則表達式忽略元素屬性

var regSrc = /<script.*?src="(.*?)"><\/script>/gmi; 
+1

我沒有使用jquery,因爲它必須適用於各種現代化的網站和應用程序,jquery正在出路。 – user1572796 2014-09-26 22:00:54

+0

有點強,但足夠公平:)記得jQuery的主要哲學是簡單性和x-browser兼容性。我認爲這會持續一段時間。 – ne1410s 2014-09-26 22:01:56

+0

@ ne1410s你爲什麼不用英文寫作? – melancia 2014-09-26 22:13:59

回答

3

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,它將不會被下載。

+0

元素不在在這種情況下,他們是用一個字符串進來的。是的,這太可怕了,但這是我正在研究的項目。 – user1572796 2014-09-26 22:20:59

+0

看看我的代碼。 input_string是一個不在DOM中的字符串 – slebetman 2014-09-26 22:21:32

+0

您的Web瀏覽器包含一個非常健壯的HTML解析器,它被稱爲「innerHTML」。用它。 – slebetman 2014-09-26 22:22:30

0

試試這個正則表達式:

/<script.*src="([^"]*).*><\/script>/ 

它會匹配任何腳本標記(與SRC),並忽略所有屬性,但SRC

0
/<script.*?src="([^"]*)"[^>]*><\/script>/gmi 
+0

幾乎它:不使用? * 此外,有了這個正則表達式,':':只有second.js會被捕獲 – laruiss 2014-09-26 22:32:33

0

只爲原則(和樂趣)的緣故,我要把我的正則表達式:

var regSrc = /<script(:? [a-z]+="[^"]*"| [a-z]+='[^']*')* src="([^"]*)"[^>]*><\/script>/gmi; 

但@slebetman答案是正確的,應予以確認。 (如果這個正則表達式用簡單的引號src='path/to/whatever.js'寫成,那麼這個正則表達式不會捕獲到src,但看起來比已經給出的更安全)。

+0

謝謝,可能需要針對IE8的正則表達式 – user1572796 2014-09-29 23:49:53