我有下面的正则表达式迭代字符串然后我构建一个脚本网址数组。如果脚本还指定了类型或id,这会中断,有没有办法忽略脚本标记上的某些arrtibute,如id,class,type等?
var regSrc = /<script.*?src="(.*?)"><\/script>/gmi;
答案 0 :(得分: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,则不会下载脚本。
答案 1 :(得分:0)
试试这个正则表达式:
/<script.*src="([^"]*).*><\/script>/
它将匹配任何脚本标记(使用src)并忽略除src
之外的所有属性答案 2 :(得分:0)
/<script.*?src="([^"]*)"[^>]*><\/script>/gmi
答案 3 :(得分:0)
只是为了原则(为了好玩),我会给我的正则表达式:
var regSrc = /<script(:? [a-z]+="[^"]*"| [a-z]+='[^']*')* src="([^"]*)"[^>]*><\/script>/gmi;
但@slebetman答案是正确答案,应该进行验证。 (如果用简单的引号src='path/to/whatever.js'
编写,这个正则表达式不会捕获src,但看起来比已经给出的更安全。)