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

时间:2014-08-17 16:27:40

标签: javascript regex filenames

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

我有一个文件让我们说:

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

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

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

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

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

提前致谢

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您可以使用:

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

答案 2 :(得分:-1)

轻松拆分

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