Regex для получения параметра функции CSS url - PullRequest
3 голосов
/ 08 июня 2010

Я пытаюсь получить часть URL следующей строки:

url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)

Так что обязательная часть, если images/ui-bg_highlight-soft_75_cccccc_1x100.png.

В настоящее время у меня есть это:

url\((?<url>.*)\)

Но похоже, что он задыхается в следующем примере:

url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30)

Что приводит к images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30 ...

Я бы хотел убедиться, что он поддерживает как можно больше вариантов (дополнительные пробелы и т. Д.).

Спасибо!
Киерон

Редактировать

Кроме того, мне нужно игнорировать необязательные кавычки 'или "...

Теперь это выглядит так:

url\(['|"]?(?<url>[^)]+)\)

Я не могу заставить его остановиться / проигнорировать последнюю цитату ...

Ответы [ 4 ]

6 голосов
/ 08 июня 2010

Это связано с жадностью * квантификатора, попробуйте использовать класс отрицанных символов вместо.

url\((?<url>[^)]*)\)

или вы можете использовать ленивый оператор

url\((?<url>.*?)\)

Первый выбор, вероятно, лучше.

Редактировать: чтобы игнорировать вторую цитату, вы можете использовать ленивый квантификатор, как это

url\(['"]?(?<url>[^)]+?)['"]?\)

Вы не используете метасимвол чередования | в классе символов.

1 голос
/ 08 июня 2010

Это должно сделать это:

url\(['"]?(?<url>.*?)['"]?\)

Но вы можете разрешить использовать дополнительные пробелы:

url\s*\(['"\s]*(?<url>.*?)['"\s]*\)

Это также будет соответствовать некоторым недопустимым строкам, но это не должно быть проблемой, если ваш CSS верен.

Более того: | в ['|"] не действует как оператор ИЛИ, оно просто соответствует буквальному |. ИЛИ неявно присутствует в символьных классах.

1 голос
/ 08 июня 2010

Заменить .* на [^\)]+

0 голосов
/ 08 июня 2010

url \ ((. * \. Png)

url\\((.[^)]*)\\)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...