通过在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()函数不是我想要的,因为图像文件名可以有许多不同类型的后缀
也许正则表达式最适合这个?
如果是,那么它的可靠代码是什么?
提前致谢
答案 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);