代码之家  ›  专栏  ›  技术社区  ›  Kieron

用于检索css url函数参数的regex

  •  3
  • Kieron  · 技术社区  · 15 年前

    我正在尝试获取以下字符串的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 回复  |  直到 13 年前
        1
  •  6
  •   Paul Creasey    15 年前

    这是由于*量词的贪婪,请尝试使用否定字符类而不是。

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

    或者你可以用懒惰的接线员

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

    第一选择是非常好的。

    编辑:要忽略第二个引号,您需要使用这样的懒惰量词

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

    您不使用交替元字符 | 在字符类中。

        2
  •  1
  •   zerkms    15 年前

    替换 .* 具有 [^\)]+

        3
  •  1
  •   Alan Moore Chris Ballance    15 年前

    应该这样做:

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

    但您可能希望允许可选空白:

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

    这也将匹配一些无效的字符串,但如果您的CSS有效,这不应该是一个问题。

    关于更多的事情:那 | 在里面 ['|"] 不充当或运算符,它只匹配文本 γ . 或隐式出现在字符类中。

        4
  •  0
  •   bluish dmajkic    13 年前

    URL((**.PNG))

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