例如,假设x = filename.jpg,我想要获取filename,其中filename可以是任何文件名(为了简化,我们假设文件名只包含[a-zA-Z0-9-_])。

我看到x.substring(0, x.indexOf('.jpg'))在DZone片段上,但x.substring(0, x.length-4)不会表现更好吗?因为,length是一个属性,不做字符检查,而indexOf()是一个函数,做字符检查。


当前回答

接受的答案只删除了最后一个扩展部分(.jpeg),这在大多数情况下可能是一个不错的选择。

我曾经不得不剥离所有扩展名(.tar.gz),文件名被限制为不包含点(所以2015-01-01.backup.tar不会有问题):

var name = "2015-01-01_backup.tar.gz";
name.replace(/(\.[^/.]+)+$/, "");

其他回答

X.length-4只支持3个字符的扩展。如果有filename。jpeg或filename。pl呢?

编辑:

回答……当然,如果您总是使用.jpg扩展名,x.length-4就可以了。

但是,如果您不知道扩展的长度,那么许多解决方案中的任何一个都更好/更健壮。

x = x.replace(/\..+ $ / ');

OR

x = x.substring(0, x. lastindexof ('.'));

OR

X = X .replace(/(.*)\.(.*?)$/, "$1");

OR(假设文件名只有一个点)

parts = x.match(/[^\.]+/);
x = parts[0];

OR(也是只有一个点)

parts = x.split(".");
x = parts[0];

在node.js中,不带扩展名的文件名可以通过如下方式获取。

const path = require('path');
const filename = 'hello.html';
    
path.parse(filename).name;     //=> "hello"
path.parse(filename).ext;      //=> ".html"
path.parse(filename).base; //=> "hello.html"

进一步的解释在Node.js文档页。

另一个一行程序:

x.split(".").slice(0, -1).join(".")
var fileName = "something.extension";
fileName.slice(0, -path.extname(fileName).length) // === "something"

不知道哪个会执行得更快,但当涉及到。jpeg或。html等扩展名时,这将更可靠

x.replace(/\.[^/.]+$/, "")