使用 JavaScript 从字符串中删除文件扩展名

使用 JavaScript 从字符串中删除文件扩展名

Remove file extension from a string using JavaScript

使用该substring()方法从字符串中删除文件扩展名,例如
filename.substring(0, filename.lastIndexOf('.')) || filename. substring
方法将返回一个新字符串,该字符串由不带扩展名的文件名组成。

索引.js
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
方法的两个参数是:

  1. 起始索引– 要包含在返回字符串中的第一个字符的索引
  2. 结束索引– 上升到但不包括该索引

我们从索引开始,0一直到但不包括字符串中最后一个点的索引。

substring方法不会改变原始字符串,因此您必须将结果保存在变量中。字符串在 JavaScript 中是不可变的。

String.lastIndexOf方法返回指定子字符串在字符串中最后一次出现的

索引。

如果字符串中不包含指定的子字符串(点字符),则lastIndexOf返回-1

如果该lastIndexOf方法返回-1,我们对该substring方法的调用将返回一个空字符串。这就是为什么如果使用不带扩展名的文件名调用函数时,我们使用逻辑 OR (||) 运算符返回传入的字符串。

请注意,如果您使用 Node.js 编写代码,则可以使用内置path
模块。

要从 Node.js 中的字符串中删除文件扩展名:

  1. 导入path模块。
  2. 将字符串传递给path.parse()方法。
  3. 访问name返回对象的属性。
  4. name属性包含不带扩展名的文件名。
索引.js
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()以下正则表达式传递给它的方法:/\.[^\/.]+$/作为第一个参数,将空字符串作为第二个参数。该方法将返回一个仅包含文件名的新字符串。

索引.js
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 中使用。