【问题标题】:Regex for retrieving the parameter of the CSS url function用于检索 CSS url 函数参数的正则表达式
【发布时间】:2010-06-07 22:50:37
【问题描述】:

我正在尝试获取以下字符串的 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>[^)]+)\)

我似乎无法让它停止/忽略最后的报价......

【问题讨论】:

    标签: c# css regex parsing


    【解决方案1】:

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

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

    或者你可以使用惰性操作符

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

    第一选择可能更好。

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

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

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

    【讨论】:

    • 我认为它会是这样的,reg-ex 是我每次使用它时都必须重新学习的东西之一——即使距离我上次使用它已经 10 分钟。感谢您的帮助。
    • @Kieron:一旦你决定用正则表达式解决问题——你就有两个问题;-)
    • 更新了,正则表达式真的很棒,只是经常被滥用和误解!
    • >> 要忽略第二个引号 --- 只需将另一个字符添加到排除集 [^\)']
    【解决方案2】:

    .* 替换为[^\)]+

    【讨论】:

      【解决方案3】:

      应该这样做:

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

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

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

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

      还有一点:['|"] 中的 | 不充当 OR 运算符,它只匹配文字 |。 OR 隐含在字符类中。

      【讨论】:

        【解决方案4】:

        url\((.*\.png)

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

        【讨论】:

          猜你喜欢
          • 2011-08-06
          • 2011-10-01
          • 1970-01-01
          • 2016-04-07
          • 1970-01-01
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          • 2018-09-06
          相关资源
          最近更新 更多