заменить относительный путь регулярным выражением на асинхронно загруженной CSS - PullRequest
0 голосов
/ 26 июля 2011

Я асинхронно загружаю 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 + '\')';
});

Как заменить все атрибуты URL?

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Попробуйте модификатор / m тоже. Поскольку строка имеет несколько строк, она, вероятно, нуждается в этом.

/url\('([^)]+)'\)/gm
0 голосов
/ 26 июля 2011

Регулярное выражение /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)": Модификаторы шаблонов @ php.net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...