在异步加载的css上用正则表达式替换相对路径

时间:2011-07-26 18:19:53

标签: javascript css regex url

我是异步加载css。

@font-face{
    src: url('fonts/le-havre-1_300_normal-webfont.eot');
    src: url('fonts/le-havre-1_300_normal-webfont.eot?#iefix') format('embedded-opentype'),
    url('fonts/le-havre-1_300_normal-webfont.woff') format('woff'),
    url('fonts/le-havre-1_300_normal-webfont.ttf') format('truetype'),
    url('fonts/le-havre-1_300_normal-webfont.svg#LeHavreLight') format('svg');
}

我必须动态替换路径,例如:

url(' -> url('http://www.site.com/skin/light/

我写了这个正则表达式,但它似乎只替换了第一个值。

var newCss = cssText.replace(/url\(\'(.+)\'\)/g, function(a,b){
    return 'url(\''+'http://www.site.com/skin/light/' + b + '\')';
});

如何替换所有网址属性?

2 个答案:

答案 0 :(得分:1)

也尝试使用/ m修饰符。由于字符串有多行,因此可能需要它。

/url\('([^)]+)'\)/gm

答案 1 :(得分:0)

正则表达式/url\(\'(.+?)\'\)/g解决了问题,因为表达式.+?不贪婪,而贪婪表达式.+整个匹配跟随字符串
(如果启用了多行):

url('fonts/le-havre-1_300_normal-webfont.eot');
src: url('fonts/le-havre-1_300_normal-webfont.eot?#iefix') format('embedded-opentype'),
url('fonts/le-havre-1_300_normal-webfont.woff') format('woff'),
url('fonts/le-havre-1_300_normal-webfont.ttf') format('truetype'),
url('fonts/le-havre-1_300_normal-webfont.svg#LeHavreLight') format('svg')

请参阅“U(PCRE_UNGREEDY)”修饰符:Pattern Modifiers @ php.net