如何使用javascript更改文件扩展名

如何使用javascript更改文件扩展名,javascript,programming-languages,methods,Javascript,Programming Languages,Methods,有人知道用Javascript更改文件扩展名的简单方法吗 例如,我有一个带有“first.docx”的变量,但我需要将其更改为“first.html”。这将更改包含文件名的字符串 let file = "first.docx"; file = file.substr(0, file.lastIndexOf(".")) + ".htm"; 对于可能没有扩展的情况: let pos = file.lastIndexOf(".&

有人知道用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";
let pos=file.lastIndexOf(“.”);
file=file.substr(0,pos<0?file.length:pos)+“.htm”;

这可能不会获得多少选票,但我无法抗拒

此代码将处理边缘情况,其中文件可能没有扩展名(在这种情况下,它将添加扩展名)。它使用

编辑:感谢@kylemit提供了一个更好的要点,它使用了相同的逻辑,但更加简洁:

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
在Node.js中:

//扩展名应包括点,例如“.html”
函数更改扩展名(文件,扩展名){
const basename=path.basename(文件,path.extname(文件))
返回path.join(path.dirname(文件),basename+扩展名)
}
与公认的答案不同,这适用于边缘情况,例如,如果文件没有扩展名,并且某个父目录的名称中有一个点。

我将使用以下方法:

path.format({ ...path.parse('/foo/bar/baz.hoge'), base: undefined, ext: '.fuga' })

这是家庭作业还是什么?这不是家庭作业。。。问题是我对Javascript一无所知,所以有些东西我不习惯:)但我需要完成一个解析器web系统。。。它可以从doc、docx、pdf、rtf或txt转换为html……这似乎是解决问题的一种相当复杂的方法。它并不复杂,拆分很容易理解,但它可能会做比您需要的更多的工作。但是,此解决方案不考虑文件名中的句点问题是:我不知道输入文件的扩展名是什么?如果文件名是“file.name.docx”?@Juan-您对@Alex K的答案的评论更合适。@chaosption:为什么?你能给我指出一个链接,上面说我不应该评论一个答案,说另一个更好吗?如果这是这里的一般规则,我将停止这样做。对于这种简单的东西,Regex是Golden Hammer AntiPattern()。请注意,如果您在没有扩展名的文件名上使用它,则会出现一种边缘情况。如果我从一个不提供典型文件的网站下载,我将如何设置文件格式??它只是一个url。i、 e..D134213BA9465CB74DFD36CDE47BF.102638C4A9F3ACA357F79EE747DD5F49F1E0F0D此代码用于从已知文件名获取现有扩展名,如果没有文件名,则问题不同。可能需要提交一个新问题。对于像
foo.bar/qux
这样的路径,这将失败,即没有扩展名,但父目录名中有点。请参阅,以获得处理这些情况的解决方案。嘿,美塞苔丝,从3年前开始挖掘这个答案。这很聪明,不过是一句妙语。请允许我谦恭地建议将此替换为处理相同边缘情况的,但使用更清晰的。我也讨厌一行:D
function changeExt (fileName, newExt) {
  var _tmp
  return fileName.substr(0, ~(_tmp = fileName.lastIndexOf('.')) ? _tmp : fileName.length) + '.' + newExt
}
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.format({ ...path.parse('/foo/bar/baz.hoge'), base: undefined, ext: '.fuga' })