使用JavaScript的正则表达式匹配URL的最后一部分

11

我有一些URL,我想要获取URL的最后一部分。

我的URL的格式为:

http://www.my-site.dch/wp-content/uploads/2012/02/Tulips.jpg
http://www.my-site.dch/wp-content/uploads/2012/02/Tulips-150x200.jpg
http://www.my-site.dch/wp-content/uploads/2012/02/Tulips-500x350.jpg

我想要捕获的是/Tulips.......jpg

我尝试过,但没有成功。

\/.*(-\d+x\d+)\.(jp(e)?g|png|gif)

还有更好的想法吗?


1
如果你需要进行大量的URL操作,并且希望你的代码更易读,我推荐使用优秀的uri.js http://medialize.github.com/URI.js。 - Jim Blackler
6个回答

26

看一下lastIndexOf方法:

var index = url.lastIndexOf("/");
var fileName = url.substr(index)

这比以上所有的都要好。 - shift66
提醒:如果URL带有参数,此解决方案将无法正常工作。例如:www.something.com/image.jpg?size=100x100(因为它仍然是这个问题的一个好解决方案而被点赞)。 - tbraun
请查看 https://dev59.com/qW855IYBdhLWcg3wy3oc#11664379,这里有一个处理更复杂的URI(URI.js)的好库。 - Matthias

13
下面的正则表达式可以解决问题:
/[^\/]+$/

2
这也会获取查询字符串。 - Brad

3
请使用这个正则表达式:-
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$

使用$6获取文件名


1
如果您来到这里是为了查找URL的最后一部分,即使URL以/结尾,有一个比任何正则表达式解决方案更简单的解决方案。尽管问题涉及正则表达式,但我会添加它,因为它确实在这里增加了一些价值。
如果URL是这样的 http://www.my-site.dch/wp-content/uploads/2012/02/Tulips.jpg
const url = 'http://www.my-site.dch/wp-content/uploads/2012/02/Tulips.jpg'
const lastpart = url.split('/').filter(e => e).pop() 

在这种情况下,即使最后一部分以/结尾,最后一部分也将返回。 因此,如果您有一个像这样的url
/services/mosquito-control/

如果你想捕捉蚊子控制的代码,你可以使用以下方法。

1
如果您确定所有图像都是jpg格式:
/.\/\S+\.jpg/

否则,更加通用:
/.\/\S+\.\w{2,3}/

那就是:

. any char
\/ the slash before the file name
\S+ any non blank char to match the file name (at least one)
\. the file extension separator
jpg or \w{3,4} the file extension

1

.*/(.*) 使用这个模式并获取第1组。我猜它会起作用。
.* 是一个贪婪的正则表达式,所以它会匹配到最后一个斜杠。在那之后,第1组将是最后的字符(你需要的内容)


我认为@winSharp93的答案是最好的。 - shift66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接