使用 JavaScript 从字符串中删除文件扩展名
Remove file extension from a string using JavaScript
使用该substring()
方法从字符串中删除文件扩展名,例如
filename.substring(0, filename.lastIndexOf('.')) || filename
. 该substring
方法将返回一个新字符串,该字符串由不带扩展名的文件名组成。
function removeExtension(filename) { return filename.substring(0, filename.lastIndexOf('.')) || filename; } // 👇️ myFile console.log(removeExtension('myFile.jpeg')); // 👇️ myFile console.log(removeExtension('myFile')); // 👇️ /my-folder/myFile console.log(removeExtension('/my-folder/myFile.jpeg'));
我们传递给
String.substring
方法的两个参数是:
- 起始索引– 要包含在返回字符串中的第一个字符的索引
- 结束索引– 上升到但不包括该索引
我们从索引开始,0
一直到但不包括字符串中最后一个点的索引。
substring
方法不会改变原始字符串,因此您必须将结果保存在变量中。字符串在 JavaScript 中是不可变的。String.lastIndexOf方法返回指定子字符串在字符串中最后一次出现的
索引。
如果字符串中不包含指定的子字符串(点字符),则lastIndexOf
返回-1
。
lastIndexOf
方法返回-1
,我们对该substring
方法的调用将返回一个空字符串。这就是为什么如果使用不带扩展名的文件名调用函数时,我们使用逻辑 OR (||) 运算符返回传入的字符串。请注意,如果您使用 Node.js 编写代码,则可以使用内置path
模块。
要从 Node.js 中的字符串中删除文件扩展名:
- 导入
path
模块。 - 将字符串传递给
path.parse()
方法。 - 访问
name
返回对象的属性。 - 该
name
属性包含不带扩展名的文件名。
const path = require('path'); console.log(path.parse('myFile.jpeg').name); // 👉️ "myFile" console.log(path.parse('myFile.jpeg').ext); // 👉️ ".jpeg" console.log(path.parse('myFile').name); // 👉️ "myFile" console.log(path.parse('myFile').ext); // 👉️ "" // 👇️ "myFile" console.log(path.parse('/my-folder/myFile.jpeg').name); // 👇️ ".jpeg" console.log(path.parse('myFolder/myFile.jpeg').ext);
该pat.parse()
函数接受一个字符串作为参数并返回一个对象。
name
对象的属性以获取不带扩展名的文件名。或者,您可以使用正则表达式。
要从字符串中删除文件扩展名,请调用将replace()
以下正则表达式传递给它的方法:/\.[^\/.]+$/
作为第一个参数,将空字符串作为第二个参数。该方法将返回一个仅包含文件名的新字符串。
function removeExtension(filename) { return filename.replace(/\.[^\/.]+$/, ''); } // 👇️ myFile console.log(removeExtension('myFile.jpeg')); // 👇️ myFile console.log(removeExtension('myFile')); // 👇️ /my-folder/myFile console.log(removeExtension('/my-folder/myFile.jpeg'));
正斜杠/ /
标记正则表达式的开始和结束。
\.
字符匹配点.
字符。我们不得不将其转义,因为它在正则表达式中具有特殊含义。
方括号[]
称为字符类。
[]
,插入符号表示“不是以下内容”。这基本上是一个否定的匹配。 ^
因此,我们匹配字符类中不是正斜杠和点的任何字符。
加号+
与前面的项目匹配 1 次或多次,美元符号$
与输入的末尾匹配。
如果您在阅读正则表达式时需要帮助,请将
来自 MDN的正则表达式速查表添加为书签。这是迄今为止最好的。
我们传递给该replace
方法的第二个参数是匹配项的替换 – 在我们的例子中是一个空字符串,因为我们想要删除文件扩展名。
您选择哪种方法是个人喜好的问题。我会继续使用该substring
方法,因为它易于阅读,非常直观并且可以在浏览器和 Node.js 中使用。