使用正则表达式忽略元素属性

时间:2014-09-26 21:57:37

标签: javascript regex

我有下面的正则表达式迭代字符串然后我构建一个脚本网址数组。如果脚本还指定了类型或id,这会中断,有没有办法忽略脚本标记上的某些arrtibute,如id,class,type等?

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

4 个答案:

答案 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,但看起来比已经给出的更安全。)