如何从Javascript中的文件名字符串中提取扩展名?

IT技术 javascript
2021-03-17 11:53:54

我如何在变量中获取文件的文件扩展名?就像我有一个1.txt文件一样,我需要txt部分。

6个回答

适用于以下所有输入的变体:

  • "file.name.with.dots.txt"
  • "file.txt"
  • "file"
  • ""
  • null
  • undefined

将是:

var re = /(?:\.([^.]+))?$/;

var ext = re.exec("file.name.with.dots.txt")[1];   // "txt"
var ext = re.exec("file.txt")[1];                  // "txt"
var ext = re.exec("file")[1];                      // undefined
var ext = re.exec("")[1];                          // undefined
var ext = re.exec(null)[1];                        // undefined
var ext = re.exec(undefined)[1];                   // undefined

解释

(?: # 开始非捕获组
  \. #一个点
  ( # 开始捕获组(捕获实际扩展名)
    [^.]+ # 除了点以外的任何东西,多次
  ) # 结束捕获组
)?# 结束非捕获组,使其可选
$ # 锚定到字符串的末尾
我建议使用 var re = /(?:\.([^./]+))?$/; 还要捕获以下情况:ab/c -> c 是文件,没有后缀
2021-04-22 11:53:54
@Tomalak 这完全是编写可维护软件的错误态度。
2021-04-24 11:53:54
@Tomalak ......这很酷!你介意解释一下正则表达式的每个部分在做什么吗?
2021-05-02 11:53:54
@Waxolunist 当然,如果您期望路径。但是您必须使用系统特定的分隔符,单独使用正斜杠是不行的。然而,问题是关于文件名。
2021-05-09 11:53:54
@Hristo 当然不是。往上看。
2021-05-13 11:53:54

我个人更喜欢拆分字符串.并只返回最后一个数组元素:)

var fileExt = filename.split('.').pop();

如果文件名中没有.你会得到整个字符串。

例子:

'some_value'                                   => 'some_value'
'.htaccess'                                    => 'htaccess'
'../images/something.cool.jpg'                 => 'jpg'
'http://www.w3schools.com/jsref/jsref_pop.asp' => 'asp'
'http://stackoverflow.com/questions/680929'    => 'com/questions/680929'
谢谢!这个对我来说是最清楚的。我将文件名传递给一个函数,所以我必须在调用 split 之前做一个空检查。
2021-04-28 11:53:54
相反,“分裂”实际上是矫枉过正。这么多的字符串/数组分配。
2021-05-06 11:53:54
正则表达式对此似乎有些矫枉过正。这更容易思考/推理。我在大多数情况下使用此解决方案。
2021-05-08 11:53:54
当没有文件扩展名时返回完整字符串在这里似乎是错误的举动。如果文件或路径没有扩展名,我宁愿返回 afalse或 anull而不是我刚刚传入的字符串。这至少可以让您处理这些情况。
2021-05-08 11:53:54
这个 ' example.com/questions/680929 ' => 'com/questions/680929' 没有任何扩展名。由于没有扩展名,如何在这种情况下获取空字符串或 null 或未定义?
2021-05-15 11:53:54

使用该lastIndexOf方法查找字符串中的最后一个句点,并获取字符串的后面部分:

var ext = fileName.substr(fileName.lastIndexOf('.') + 1);
不适用于“文件”变体(即无扩展名)。
2021-04-28 11:53:54
事实上,确实如此。它返回整个文件名,这与 IMO 中的任何内容一样好。如果您想要一个空字符串,则需要使用(喘气!)if 语句。此外,如果将 node.js 与 JavaScript 一起使用,请参阅“路径”内置module。
2021-04-29 11:53:54
const extension = path.extname(url);
2021-05-20 11:53:54

我建议使用lastIndexOf()而不是indexOf()

var myString = "this.is.my.file.txt"
alert(myString.substring(myString.lastIndexOf(".")+1))

最好使用以下内容;始终有效!

var ext =  fileName.split('.').pop();

这将返回没有点前缀的扩展名。你可以加 ”。” + ext 检查您希望支持的扩展!

重复回答
2021-04-22 11:53:54