js函数从url获取文件名

IT技术 javascript function
2021-02-16 15:09:16

我有一个像http://www.example.com/blah/th.html 的网址

我需要一个 javascript 函数来为我提供 'th' 值。

我所有的 url 都具有相同的格式(2 个字母的文件名,带有 .html 扩展名)。

我希望它是一个安全的函数,所以如果有人传入一个空的 url,它不会中断。

我知道如何检查长度,但我应该检查 null 对吗?

6个回答
var filename = url.split('/').pop()
这个怎么样? new URL(url).pathname.split('/').pop();
2021-04-19 15:09:16
这也不处理 URL 片段 ID(即 # ID)
2021-04-21 15:09:16
如果后面有查询参数怎么办?
2021-05-03 15:09:16
这个怎么样: url.split('#').shift().split('?').shift().split('/').pop()
2021-05-07 15:09:16
到目前为止,最简单和最好的答案。
2021-05-16 15:09:16

为什么这么难?

var filename = url.split('/').pop().split('#')[0].split('?')[0];

如果 URL 实际上没有文件名怎么办?例如:http://www.example.com此函数将返回不正确的“www.example.com”。它应该是空字符串或 null。
2021-04-16 15:09:16
@hayatbiralem 对另一条评论给出了更好的答案: url.split('#').shift().split('?').shift().split('/').pop() 你必须从拆分开始在 # 和 ? 然后在 / 上拆分,否则您将捕获锚点和查询字符串的 / 部分,而不是您路径中的部分(这通常会导致亚马逊 s3 保护的 url 出现错误)
2021-04-21 15:09:16
不会为 "http://www.example.com/filenam.zip?passkey=1/2"
2021-04-29 15:09:16
做得很好。处理#和/或的存在与否?
2021-05-10 15:09:16
这应该是最佳答案。
2021-05-15 15:09:16

使用匹配功能。

function GetFilename(url)
{
   if (url)
   {
      var m = url.toString().match(/.*\/(.+?)\./);
      if (m && m.length > 1)
      {
         return m[1];
      }
   }
   return "";
}
不删除查询字符串
2021-04-20 15:09:16
这将返回不带扩展名的文件名。
2021-04-30 15:09:16
如果文件名中有多个 '.',这将不起作用
2021-05-16 15:09:16

与其他人类似,但是......我使用了汤姆的简单脚本 - 一行,
然后你可以在任何地方使用文件名 var:http :
//www.tomhoppe.com/index.php/2008/02/grab-文件名来自窗口位置/

var filename = location.pathname.substr(location.pathname.lastIndexOf("/")+1);
长度是可选的我相信: location.pathname.substr(location.pathname.lastIndexOf("/")+1)
2021-04-29 15:09:16

考虑 URL 查询和哈希标识符的正则表达式解决方案:

function fileNameFromUrl(url) {
   var matches = url.match(/\/([^\/?#]+)[^\/]*$/);
   if (matches.length > 1) {
     return matches[1];
   }
   return null;
}

JSFiddle在这里

这是使用正则表达式时的最佳答案。
2021-04-30 15:09:16
如果 URL 实际上没有文件名怎么办?例如:http://www.example.com此函数将返回不正确的“www.example.com”。它应该是空字符串或 null。
2021-05-01 15:09:16