Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中可靠地获取没有后缀的文件名?_Javascript_Regex_Filenames - Fatal编程技术网

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

如何在javascript中可靠地获取没有后缀的文件名?,javascript,regex,filenames,Javascript,Regex,Filenames,通过删除javascript中的后缀来获取文件名的可靠方法是什么 我有一份档案,比如说: 及 现在我要拿绳子 replace()函数不是我想要的,因为图像文件名可能有许多不同类型的后缀 也许regex是最好的 如果是的话,它的可靠代码是什么 提前感谢替换函数可能就是您想要的,它可以接受正则表达式作为搜索模式: url = url.replace(/_[^\/]+(\.[^\/]*)$/, "$1"); 该表达式的作用是: 查找后面没有任何斜杠的。(因此我们只查看路径中的最后一段) 允许在之后

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

我有一份档案,比如说:

现在我要拿绳子

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

也许regex是最好的

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


提前感谢

替换函数可能就是您想要的,它可以接受正则表达式作为搜索模式:

url = url.replace(/_[^\/]+(\.[^\/]*)$/, "$1");
该表达式的作用是:

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

  • 允许在
    之后使用任意数量的非斜杠字符

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

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

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

例如:


例子
身体{
字体系列:monospace;
}
(功能(){
“严格使用”;
测试(”http://example.com/uploads/images/a51dd42_thumb.jpg");
测试(”http://example.com/uploads/images/a51dd42_s.jpg");
功能测试(url){
显示(“前:”+url);
url=url.replace(/\[^\/]+(\.[^\/]*)$/,“$1”);
显示(“后:”+url);
}
功能显示(msg){
var p=document.createElement('p');
p、 innerHTML=字符串(msg);
文件.正文.附件(p);
}
})();
您可以使用:

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

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

.

它总是有
\uu
在里面吗?那么你想摆脱
\u
之间的东西,包括
\u
本身。谢谢。你的代码似乎依赖于像jpg这样的扩展。有没有更好的方法可以适应任何类型的扩展?谢谢。我需要的就是这样,我正在标记答案为check.:)很奇怪,如果我有两个下划线,比如a51dd42_profile_thumb.jpg,会怎么样?我用本地脚本测试了它,但它同时替换了_profile和_thumb@MarkBonnieVestil:如果您希望它最终成为
a51dd42_profile.jpg
,我们将执行与以前相同的操作,以避免在路径的早期段中匹配:Exclu将
\
从它后面可能的字符(可能在两个位置)中删除。因此,如果扩展名是可选的,那么我们最终得到:
/\[^\/\+(\.[^\/\/\*)$/
(或者
/\[^\/\\]+(\.[^\/\]*)?$/
。-(这个正则表达式看起来有点生气,不是吗?;-D)
var start = Filename.split('_')[0], 
file = Filename.split('_')[1],
end = file.split('.')[1];
console.log(start + '.' + end);