如何在javascript中可靠地获取没有后缀的文件名?

Posted

技术标签:

【中文标题】如何在javascript中可靠地获取没有后缀的文件名?【英文标题】:How to reliably get the filename without the suffix in javascript? 【发布时间】:2014-10-10 15:37:26 【问题描述】:

通过在javascript中删除后缀来获取文件的文件名的可靠方法是什么?

我有一个文件,比如说:

http://example.com/uploads/images/a51dd42_thumb.jpg 和 http://example.com/uploads/images/a51dd42_s.jpg

现在我想获取字符串http://example.com/uploads/images/a51dd42.jpg

replace() 函数不是我想要的,因为图像文件名可能有许多不同类型的后缀

也许正则表达式最适合这个?

如果是,它的可靠代码是什么?

提前致谢

【问题讨论】:

那里总是有_ 吗?所以你想摆脱_.之间的东西,包括_ istelf。 【参考方案1】:

轻松拆分

var start = Filename.split('_')[0], 
file = Filename.split('_')[1],
end = file.split('.')[1];
console.log(start + '.' + end);

.

【讨论】:

【参考方案2】:

replace 函数可能你想要的,它可以接受正则表达式作为搜索模式:

url = url.replace(/_[^\/]+(\.[^\/]*)$/, "$1");

该表达式的作用:Example on Regex101

查找后面没有任何斜杠的_(因此我们只查看路径中的最后一段)。

_ 之后允许任意数量的非斜线字符。

停止匹配它发现的最后一个 . 后跟零个或多个字符(我假设这些总是有扩展名);捕获. 及其后面的字符(例如扩展名)。

仅将整体匹配替换为 . 及其后的扩展名。 (替换字符串中的$1比较特殊,表示“使用第一个捕获组的值。)

如果您的路径可能有也可能没有扩展名,只需在正则表达式末尾附近添加一个?,就在$之前:/_[^\/]+(\.[^\/]*)?$/(这使得捕获组中的所有内容都是可选的)。

示例:Live Copy

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Example</title>
  <style>
    body 
      font-family: monospace;
    
  </style>
</head>
<body>
<script>
  (function() 
    "use strict";

    test("http://example.com/uploads/images/a51dd42_thumb.jpg");
    test("http://example.com/uploads/images/a51dd42_s.jpg");

    function test(url) 
      display("Before: " + url);
      url = url.replace(/_[^\/]+(\.[^\/]*)$/, "$1");
      display("After: " + url);
    

    function display(msg) 
      var p = document.createElement('p');
      p.innerHTML = String(msg);
      document.body.appendChild(p);
    
  )();
</script>
</body>
</html>

【讨论】:

谢谢。正是我需要的,所以我将答案标记为检查。 :) 只是好奇,如果我有两个像 a51dd42_profile_thumb.jpg 这样的下划线怎么办?我在本地脚本中对其进行了测试,但它同时替换了 _profile 和 _thumb @MarkBonnieVestil:如果您希望它最终成为 a51dd42_profile.jpg,我们会做同样的事情来避免在路径的早期段中匹配:从可能的字符中排除 _可以跟随它(可能在这两个地方)。所以我们最终得到:/_[^\/_]+(\.[^\/_]*)$/(或/_[^\/_]+(\.[^\/_]*)?$/,如果扩展是可选的)。 - jsbin.com/peqori/2(那个正则表达式看起来有点生气,不是吗?;-D)【参考方案3】:

你可以使用:

var s = 'http://example.com/uploads/images/a51dd42_thumb.jpg';
var r = s.replace(/^(.+?)_[^.]+(\.[^\/.]+)$/i, '$1$2');
//=> http://example.com/uploads/images/a51dd42.jpg

【讨论】:

谢谢。您的代码似乎依赖于像 jpg 这样的扩展。有没有更好的方法可以适应任何类型的扩展?

以上是关于如何在javascript中可靠地获取没有后缀的文件名?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用滚动条可靠地获取屏幕宽度

如何在 iPhone 上可靠地获取位置

如果应用程序在 GC 中,如何可靠地获取 JVM 核心转储?

如何在源代码管理资源管理器中可靠地获取最新的大量文件

Javascript / jQuery 获取我正在输入的文本区域的 id [重复]

如何批量地转换linux文档成txt格式