Javascript 从$().css(“背景图像”)获取相对路径

Javascript 从$().css(“背景图像”)获取相对路径,javascript,jquery,css,regex,Javascript,Jquery,Css,Regex,在CSS中,我有背景图像:url(folder/bg.jpg) 为此,JQuery的css(“背景图像”)返回url(http://www.example.com/folder/bg.jpg) 但是我只需要文件夹/bg.jpg 我正在寻找一个能帮我解决这个问题的正则表达式。尝试使用String.prototype.split() $(“div”).html( $(“div”).css(“backgroundImage”).split(/\/) .slice(-2).join(“/”).slic

在CSS中,我有
背景图像:url(folder/bg.jpg)

为此,JQuery的
css(“背景图像”)
返回
url(http://www.example.com/folder/bg.jpg)

但是我只需要
文件夹/bg.jpg


我正在寻找一个能帮我解决这个问题的正则表达式。

尝试使用
String.prototype.split()

$(“div”).html(
$(“div”).css(“backgroundImage”).split(/\/)
.slice(-2).join(“/”).slice(0,-1)
)
div{
背景图片:url(http://www.example.com/folder/bg.jpg)
}

由于jQuery将返回绝对路径,因此如果不进行字符串操作,就永远无法确定相对路径,因为给定页面在目录层次结构中的嵌套程度,就不知道要删除什么。我建议用正则表达式替换字符串。见下文plnkr

    $("div").click(function() {
        var bg = $(this).css('background-image');
        bg = bg.replace('url(http://run.plnkr.co/cybkjF7HN9sYH3oS/','').replace(')','');
        alert(bg);
    });

我知道这不是所有情况下最好的正则表达式,但你明白了

/* Explaining:
/ regex here /
[^\/]+  ---> will match anything before a / (https:)
\/\/    ---> the // after https: 
[^\/]+  ---> will match anything before / (www.example.com)
\/      ---> will match /
(.*)    ---> the rest of url (that you want)
So, you need to get the [1] index of the returned array.
*/ 
"http://www.example.com/folder/bg.jpg".match(/[^\/]+\/\/[^\/]+\/(.*)/)[1]

将返回:“folder/bg.jpg”

为什么需要css计算样式来返回相对路径?+1@A.Wolf。此外,如果你想为其他元素重复使用背景图像,你当然可以使用绝对路径。它应该是计算图像主色的函数的输入参数。加载页面时,具有背景图像的div会根据其背景图像接收背景颜色。@tom我仍然不明白绝对路径有什么问题“Computed style属性依赖于浏览器,您不应该依赖于它。如果我更正了,某些浏览器会返回相对值,而其他浏览器返回绝对值。”我不知道。我认为它是可靠的。在了解了这一点之后,我认为最好的做法是在我的HTML中使用
data-*
属性,将URL存储在那里,然后使用JavaScript读取该URL。当然,路径总是不同的,这只是一个例子。您当然最好替换返回字符串中的window.location.hostname,但仍然不是css属性中设置的路径。如果您是guest271314,它正好满足我的需要,因此我接受它作为我问题的答案,但是感谢@A.Wolff,现在我知道我想要完成的并不是解决问题的最佳方法,所以我不会阅读背景图像CSS属性,我认为我最好在HTML中使用data-*属性。尽管如此,这个答案可能对寻找类似字符串操作方法来处理URL的人有所帮助。