0

我试图制作一个正则表达式来查找: background-image:url('URL'); 其中 URL 是图像的外部链接。一直在尝试这样的事情:

 /\s*?[ \t\n]background-image:url('https?:\/\/(?:[a-z\-]+\.)+[a-z]{2,6}(?:\/[^\/#?]+)+\.(?:jpe?g|gif|png)$');/i

但无法让它工作。我将它与 javascript/jquery 一起使用

4

3 回答 3

0

这能得到你想要的吗?:

/\s*?[ \t\n]background-image:url\('.+?'\);/i
于 2013-06-10T17:05:24.677 回答
0

如果您知道它只会随着中间的 URL 而改变,我认为您可以将其简化为。我可能过度使用 \ 转义,但安全总比抱歉好。

/background\-image\:url\(\'.*?\'\)\;/

于 2013-06-10T17:05:34.990 回答
-1

埃帕斯卡雷洛一针见血。这个来源是你控制的吗?或者至少是一个可预测的网站?输入的多个不同示例和您的预期结果是什么?

这是否总是内联在双引号中,因此您的 URL 将总是在单引号中?一些旧网站在其 CSS 文件或标题 CSS 中使用双引号。

你想捕捉整个事情吗?或者您只是想提取结果 URL?

SirCapsAlot 提出了一个很好的问题,您是否只是在寻找一般的背景图片 URL?因为它们也可以使用 Background 属性,甚至可以在 JavaScript 中使用 .backgroundImage="url(image.jpg)".

你肯定只想要那些包含 http(s) 的吗?

由于您给出的要求有限,这是最好的正则表达式:

background-image\s*:\s*url\('(https?://[^']+)

如果您对我的问题有可能会改变您的要求的答案,因此请在此处发表评论,从而改变我的答案。

分解:

background-image:\s*url  //Find the literal text to begin
\('                      //Find the literal opening parens and quote
(                        //Begin Capture Group 1
    https?://            //Require the match of https:// (the s is optional because of the ?)
    [^']+                //Require that everything until the next quote is matched
)                        //Capture the result into Group 1

一位同事指出,我可能因为没有捕捉到收盘价而被否决。注意:捕获收盘价将是一个浪费的步骤,并且此正则表达式不需要工作。

他还指出,有人可能因为在 url 部分要求 http 或 https 而对我投了反对票。但用户的问题专门针对外部 URL,而不是内部 URL。所以这是一个有效的要求,让他更接近他的要求。

太...不知道为什么这会被否决。

于 2013-06-10T17:19:25.053 回答