我试图制作一个正则表达式来查找: 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 一起使用
我试图制作一个正则表达式来查找: 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 一起使用
这能得到你想要的吗?:
/\s*?[ \t\n]background-image:url\('.+?'\);/i
如果您知道它只会随着中间的 URL 而改变,我认为您可以将其简化为。我可能过度使用 \ 转义,但安全总比抱歉好。
/background\-image\:url\(\'.*?\'\)\;/
埃帕斯卡雷洛一针见血。这个来源是你控制的吗?或者至少是一个可预测的网站?输入的多个不同示例和您的预期结果是什么?
这是否总是内联在双引号中,因此您的 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。所以这是一个有效的要求,让他更接近他的要求。
太...不知道为什么这会被否决。