开发者

Regex for retrieving the parameter of the CSS url function

I'm trying to get the url portion of the following string:

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

So the required part if images/ui-bg_highlight-soft_75_cccccc_1x100.png.

Currently I've got this:

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

But it seems to be choking on the following example:

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

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

I'd like to make sure that it supports as many variations as possible (additional whitespace etc).

Thanks!

Kieron

Edit

Additi开发者_Go百科onally, I need to ignore the optional quotes ' or " ...

Now, it looks like this:

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

I can't seem to get it to stop/ ignore the last quote...


This is due to the greediness of the * quantifier, try a negated character class instead of a .

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

or you could use the lazy operator

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

First choice is proabably better.

Edit: To ignore the second quote, you will want to use the lazy quantifier like this

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

You don't use the alternation meta character | within a character class.


Replace .* with [^\)]+


This should do it:

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

But you might want to allow for optional whitespace:

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

That will also match some invalid strings, but that shouldn't be a problem if your CSS is valid.

On more thing: that | in ['|"] does not act as an OR operator, it just matches a literal |. OR is implicit in character classes.


url\((.*\.png)

url\\((.[^)]*)\\)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜