背景图像的正则表达式:url('URL');

时间:2013-06-10 17:02:22

标签: javascript jquery regex

我试图制作一个正则表达式来寻找: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

3 个答案:

答案 0 :(得分:0)

这会得到你想要的吗?:

/\s*?[ \t\n]background-image:url\('.+?'\);/i

答案 1 :(得分:0)

我认为你可以简化它,如果你知道它只会随着中间的URL而改变。我可能过度使用\ escapes,但最好是安全而不是抱歉。

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

答案 2 :(得分:-1)

Epascarello击中头部的钉子。这是您控制的来源吗?或者至少是一个可预测的网站?什么是多个不同的输入示例和您的预期结果?

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

你想抓住整件事吗?或者您只是想提取生成的URL?

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

你绝对只想要包含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

一位同事指出,我可能因为没有捕捉到收盘价而被投票。注意:捕获结束标记将是一个浪费的步骤,并且这个正则表达式不是必需的。

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

Sooo ...不确定为什么这会有一个downvote。