Reg Expression to scrape background:url但是'url(data:image'

时间:2013-09-15 23:16:16

标签: regex

我正在使用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'文件网址。所以,这里的temp变量包含两个 - 好的'image / goes / here.jpg'url以及我们不需要的'data:image / png [..]'。我们如何更新正则表达式以使其工作?如果你也可以分享正确的正则表达式的理性背后,以帮助我们更好地学习正则表达式,我将非常感激。非常感谢你

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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