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

san*_*anu 128 javascript

我如何在变量中获得文件的File扩展名?就像我有一个文件1.txt我需要它的txt部分.

Tom*_*lak 285

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

  • "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
Run Code Online (Sandbox Code Playgroud)

说明

(?:         # begin non-capturing group
  \.        #   a dot
  (         #   begin capturing group (captures the actual extension)
    [^.]+   #     anything except a dot, multiple times
  )         #   end capturing group
)?          # end non-capturing group, make it optional
$           # anchor to the end of the string

  • @Hristo当然不是.往上看. (30认同)
  • @Tomalak ......真酷!你介意解释一下reg ex的每个部分在做什么吗? (6认同)
  • 我建议使用var re = /(?:?.([^./]+))?$/; 捕获以下情况:ab/c - > c是文件,没有后缀 (3认同)
  • @Waxolunist当然,如果你期待路径.但是你必须使用系统特定的分隔符,单独的正斜杠是不行的.但问题是关于文件名. (3认同)
  • @AndrWeisR 当维护者不懂正则表达式时,这是他们的错。这是一个人可以学习的东西。 (3认同)
  • @Herbertusz 使用适合您的方法。Split+pop 不会返回相同的结果。 (2认同)
  • @Tomalak 这完全是编写可维护软件的错误态度。 (2认同)

Guf*_*ffa 176

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

var ext = fileName.substr(fileName.lastIndexOf('.') + 1);
Run Code Online (Sandbox Code Playgroud)

  • 实际上,确实如此.它返回整个文件名,这与IMO中的任何内容一样好.如果你想要一个空字符串,你需要使用(gasp!)if语句.此外,如果将node.js与JavaScript一起使用,请参阅"path"内置模块. (22认同)
  • `const extension = path.extname(url);` (4认同)

小智 154

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

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'
Run Code Online (Sandbox Code Playgroud)

  • 相反,“拆分”实际上是矫枉过正。这么多的字符串/数组分配。 (6认同)
  • 正则表达式对此似乎有些矫枉过正。这更容易思考/推理。我在大多数情况下使用此解决方案。 (3认同)
  • 当没有文件扩展名时返回完整字符串似乎是错误的举动。如果文件或路径没有扩展名,我宁愿返回“false”或“null”,而不是我刚刚传入的字符串。这至少允许您处理这些情况。 (2认同)

Rus*_*Cam 22

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

var myString = "this.is.my.file.txt"
alert(myString.substring(myString.lastIndexOf(".")+1))
Run Code Online (Sandbox Code Playgroud)


小智 13

最好使用以下内容; 一直工作!

var ext =  fileName.split('.').pop();
Run Code Online (Sandbox Code Playgroud)

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

  • 重复回答 (2认同)

che*_*vim 2

var x = "1.txt";
alert (x.substring(x.indexOf(".")+1));
Run Code Online (Sandbox Code Playgroud)

注 1:如果文件名的格式为file.example.txt
,则此操作将不起作用 注 2:如果文件名的格式为 file,此操作将失败