如何在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中可靠地获取没有后缀的文件名?的主要内容,如果未能解决你的问题,请参考以下文章
如果应用程序在 GC 中,如何可靠地获取 JVM 核心转储?