【问题标题】:Reg Expression to scrape background:url but 'url(data:image'正则表达式刮背景:url 但 'url(data:image'
【发布时间】:2013-09-15 23:16:16
【问题描述】:

我正在编写 gradle 脚本来检查大型 css 文件并删除图像的 URL。到目前为止:

def temp = ".post-format background:url(image/goes/here.jpg); {background:  .post-format {background: url(../img/post //formats.png);display:;display:.woocommerce-info:before {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAG0lEQVQIHWP8DwQMQMACxIwwBliECcQDATgDAMHrBQqJ6tMZAAAAAElFTkSuQmCC)center no-repeat #18919c    }"
def list = temp.findAll(/background:[\s]?url\([^\)]*\)/){ match ->
   match
}

这可行,但它也需要我们不需要的 'data:image' 文件 url。所以,这里的 temp 变量包含两个 - 好的 'image/goes/here.jpg' url 和一个我们不需要的 'data:image/png[..]'。我们将如何更新正则表达式以使其工作?如果您还可以分享您对正确正则表达式的理性支持,以帮助我们更好地学习正则表达式,我将不胜感激。非常感谢你

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以使用negative look ahead 机制来完成您想要的。在转义的左括号之后立即插入(?!data:image),这意味着您必须在该点匹配该文本。所以你的正则表达式变成:

    /background:[\s]?url\((?!data:image)[^\)]*\)/
    

    您可以看到rubular 中说明的方法。另见How can I find everything BUT certain phrases with a regular expression?

    【讨论】:

    • 太棒了!它就像魅力一样......我还不够向前看:)也感谢您指向Rubular。它看起来是一个非常简洁的工具,将来会派上用场
    【解决方案2】:

    您没有指定您使用的语言,但如果您想要的 URL 始终是第一个,请不要进行全局匹配(这就是 findAll 所做的,无论如何语言)。最有可能的是,将temp.findAll 更改为temp.match 并将结果分配给标量字符串变量即可。但请告诉我们是哪种语言。

    【讨论】:

    • 谢谢阿迪。这是用于 gradle 脚本并使用 groovy 语言
    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2011-11-09
    相关资源
    最近更新 更多