有没有简单的方法可以在Javascript中更改文件扩展名?
例如,我有一个变量名为"first.docx",但我需要将其更改为"first.html"。
有没有简单的方法可以在Javascript中更改文件扩展名?
例如,我有一个变量名为"first.docx",但我需要将其更改为"first.html"。
这将更改包含文件名的字符串;
let file = "first.docx";
file = file.substr(0, file.lastIndexOf(".")) + ".htm";
对于可能没有扩展名的情况:
let pos = file.lastIndexOf(".");
file = file.substr(0, pos < 0 ? file.length : pos) + ".htm";
我会使用这个:
path.format({ ...path.parse('/path/to/file.txt'), base: '', ext: '.md' })
将"/path/to/file.txt"
更改为"/path/to/file.md"
。
在 Node.js 中:
path.join(path.dirname(file), path.basename(file, path.extname(file)) + '.md')
更易读的说法:
// extension should include the dot, for example '.html'
function changeExtension(file, extension) {
const basename = path.basename(file, path.extname(file))
return path.join(path.dirname(file), basename + extension)
}
与被接受的答案不同,此方法也适用于极端情况,例如文件没有扩展名且其中一个父目录的名称中含有点号。file = file.replace(/\.[^.]+$/, '.html');
/.[^.]+$/
这个解决方案对于这个问题来说是一个很好的解决方案。不确定为什么会有这么多抗议? - Eat at Joes这可能不会得到很多赞,但我忍不住要分享一下。
这段代码将处理一个边缘情况,即文件可能没有扩展名(在这种情况下,它会添加扩展名)。它使用了“波浪线技巧”。
function changeExt (fileName, newExt) {
var _tmp
return fileName.substr(0, ~(_tmp = fileName.lastIndexOf('.')) ? _tmp : fileName.length) + '.' + newExt
}
修改:感谢@kylemit提供了一个更好的gist,使用相同的逻辑,但方式更加简洁明了:
function changeExt(fileName, newExt) {
var pos = fileName.includes(".") ? fileName.lastIndexOf(".") : fileName.length
var fileRoot = fileName.substr(0, pos)
var output = `${fileRoot}.${newExt}`
return output
}
console.log(changeExt("img.jpeg", "jpg")) // img.jpg
console.log(changeExt("img.name.jpeg", "jpg")) // img.name.jpg
console.log(changeExt("host", "csv")) // host.csv
console.log(changeExt(".graphqlrc", "graphqlconfig")) // .graphqlconfig
path.parse("first.docx").name + ".html"
在JavaScript或Node.js中,没有特定的方法来设置文件扩展名,因此解决方案归结为修改字符串。
let file = 'test.txt';
function changeFileExtension(str,ext){
return str.split('.')[0] + `.${ext}`;
}
console.log(changeFileExtension(file,'html'));
var file = "first.docx";
file = file.split(".");
file = file[0]+".html";
foo.bar/qux
这样的路径会失败,即父目录名称中没有扩展名但有点号。请参见我的答案,其中提供了一个可以处理这些情况的解决方案。 - emlai