如何使用javascript / jquery从url中提取文件名?

时间:2009-08-19 19:59:32

标签: javascript jquery regex

某个变量可能包含相对路径或绝对路径。不管怎样,我需要能够从变量中提取文件名:

http://www.somesite.com/dir1/dir2/filename.gif
/dir1/dir2/filename.gif

目录结构也是任意的。所以基本上给出了上面的url(使用arbirtrary目录结构),我需要拉'filename.gif'。提前致谢

16 个答案:

答案 0 :(得分:55)

var index = yourstring.lastIndexOf("/") + 1;
var filename = yourstring.substr(index);

答案 1 :(得分:26)

缩短方式

var filename = window.location.href.substr(window.location.href.lastIndexOf("/")+1);

答案 2 :(得分:11)

var filename = url.match(/.*\/(.*)$/)[1];

答案 3 :(得分:7)

var filename= url.split('/').pop()

答案 4 :(得分:6)

我会使用正则表达式。

[^/]*$

它选择最后一次斜杠后的所有内容直到结束。您可以展开它以单独选择扩展名:

/([^/]*?)(\.[^\./]*)?$

答案 5 :(得分:5)

var path = window.location.pathname;
var filename = path.match(/.*\/([^/]+)\.([^?]+)/i)[1];

如果您不希望查询字符串成为文件名的一部分(您可能不这样做),请使用此选项。

答案 6 :(得分:3)

var URL = window.location.pathname; // Gets page name
var page = URL.substring(URL.lastIndexOf('/') + 1);  
alert(page);

答案 7 :(得分:2)

// Extract filename from current page.
var filePath = window.location.pathname;
var fileName = filePath.substr(urlPath.lastIndexOf("/") + 1);

答案 8 :(得分:2)

对于您的示例,子字符串搜索可能是您的最佳选择。

但是,如果您的URI实际上足够复杂,您可以尝试Steven Levithan的parseUri

parseUri(uri).file;

它有两种模式,每种模式都有一定的怪癖,所以一定要check out the demo

答案 9 :(得分:2)

我通过以下方法解决了这个问题:

var URL = window.location.pathname; // Gets page name
var page = URL.substring(URL.lastIndexOf('/') + 1); 
// then display your filename to console
console.info(page)

答案 10 :(得分:1)

使用正则表达式,沿着这些方向应该可以做到这一点:

[^/]+\.[^/]+

虽然这并未涵盖所有可能的情况,但它应该适用于大多数情况。你可以使用这些:

var url = window.location.href;
var regex = new RegExp("[^/]+\.[^/]+");
var fileName = regex.exec(url);

希望有所帮助

答案 11 :(得分:1)

var filename = /[^\\\/:*?"<>|\r\n]+$/i.exec(window.location.href)[0];

答案 12 :(得分:1)

谢谢sam deng,似乎工作但是你的朋友有一个错字:

// Extract filename from current page.
var filePath = window.location.pathname;
var fileName = filePath.substr(filePath.lastIndexOf("/") + 1);

答案 13 :(得分:1)

    var pathnameArray = window.location.pathname.split("/");
    var nameOfFile = pathnameArray[pathnameArray.length -1];

在考虑制作阵列与使用其他人提到的子码时,我可能不知道一些开销。所以,这可能不是一个很好的答案,而是一种解决同一问题的不同方法。

答案 14 :(得分:0)

如果您的网址是这样的:

yourdomain.com/app_dev.php
yourdomain.com/app_dev.php/article/2

并且您只想提取文件名(/app_dev.php)以便链接到您的主页使用:

var filename = window.location.pathname.substr(0, window.location.pathname.indexOf("/", 1));
window.location = filename;

答案 15 :(得分:0)

我的回答处理了 URL 已编码或 URL 包含作为编码 URL 的查询值的边缘情况,其中 / 变为 %2F

const getImageNameFromURL = (urlInput) => {
  const imageFullnameResult = urlInput.match(/.+(\/|%2F)(.+)/);

  if (!imageFullnameResult) return null;

  const imageFullname = imageFullnameResult[2];

  const imageNameResult = imageFullname.match(
    /.+(jpg|png|svg|jpeg|webp|bmp|gif)/
  );

  if (!imageNameResult) return imageFullname;

  const imageName = imageNameResult[0];

  if (!imageName) return null;

  return imageName;
};

// common URL
const commonURL = 'https://static.tvtropes.org/pmwiki/pub/images/aubrey_plaza.jpg?quality=75&w=1200&h=900&crop=1'

// URL contains query which is an encoded URL which is the actual image.
const urlContainsEncodedURL = 'https://ca-times.brightspotcdn.com/dims4/default/a7ccc15/2147483647/strip/true/crop/2048x1152+0+0/resize/840x473!/quality/90/?url=https%3A%2F%2Fcalifornia-times-brightspot.s3.amazonaws.com%2Fd5%2Fb5%2Fa8bffb00214d8bd8149373c18a6a%2Fla-1467703026-snap-photo'

console.log(getImageNameFromURL(commonURL))
// result: aubrey_plaza.jpg


console.log(getImageNameFromURL(urlContainsEncodedURL))
// result: la-1467703026-snap-photo