【问题标题】:How to extract extension from filename string in Javascript? [duplicate]如何从Javascript中的文件名字符串中提取扩展名? [复制]
【发布时间】:2010-10-15 10:05:46
【问题描述】:

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

【问题讨论】:

    标签: javascript


    【解决方案1】:
    var x = "1.txt";
    alert (x.substring(x.indexOf(".")+1));
    

    注意 1:如果文件名的格式为 file.example.txt
    ,这将不起作用 注意 2:如果文件名的格式为 file

    ,这将失败

    【讨论】:

    • 我得到了我想要的东西thanx....
    • 您可以使用 lastIndexOf,但不确定浏览器是否支持(可能需要检查 ie6,但它很容易制作您自己的原型).. 您只需要确保您确保从之前扫描最后一个字符..所以'某事'。不匹配,但 'something.x' 会
    • 是的,我的解决方案非常简单,但我已经记录了它的缺点 ;)
    【解决方案2】:

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

    var ext = fileName.substr(fileName.lastIndexOf('.') + 1);
    

    【讨论】:

    • 不适用于“文件”变体(即无扩展名)。
    • 确实如此。它返回整个文件名,在这种情况下与 IMO 中的任何内容一样好。如果您想要一个空字符串,则需要使用(喘气!)if 语句。此外,如果将 node.js 与 JavaScript 一起使用,请参阅“路径”内置模块。
    • const extension = path.extname(url);
    【解决方案3】:

    我使用下面的代码:

    var fileSplit = filename.split('.');
    var fileExt = '';
    if (fileSplit.length > 1) {
    fileExt = fileSplit[fileSplit.length - 1];
    } 
    return fileExt;
    

    【讨论】:

      【解决方案4】:

      如果您的文件有更多 . (点)在名称中。

      <script type="text/javascript">var x = "file1.asdf.txt";
      var y = x.split(".");
      alert(y[(y.length)-1]);</script>
      

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案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
          

          解释

          (?: # 开始非捕获组 \。 # 一个点 (#开始捕获组(捕获实际的扩展) [^.]+ # 除了点之外的任何东西,多次 ) # 结束捕获组 )? # 结束非捕获组,使其可选 $ # 锚定到字符串的末尾

          【讨论】:

          • @Tomalak...这很酷!您介意解释一下 reg ex 的每个部分在做什么吗?
          • @Hristo 当然不是。见上文。
          • 我建议使用 var re = /(?:\.([^./]+))?$/;也捕获以下情况:a.b/c -> c 是文件并且没有后缀
          • @Waxolunist 当然,如果您期望路径。但是您必须使用系统特定的分隔符,单独的正斜杠是行不通的。但是,问题是关于文件名的。
          • @Tomalak 这对编写可维护的软件是完全错误的态度。
          【解决方案7】:

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

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

          如果 filename 中没有 .,你会得到整个字符串。

          示例:

          '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 之前进行一次空值检查。
          • 正则表达式似乎有点矫枉过正。这更容易思考/推理。我在大多数情况下都使用此解决方案。
          • 相反,“分裂”实际上是矫枉过正。这么多的字符串/数组分配。
          • 这个 'example.com/questions/680929' => 'com/questions/680929' 没有任何扩展名。由于没有扩展名,如何在这种情况下获取空字符串或 null 或未定义?
          • 在没有文件扩展名的情况下返回完整的字符串似乎是错误的举动。如果文件或路径没有扩展名,我宁愿返回 falsenull 而不是我刚刚传入的字符串。这至少可以让你处理这些情况。
          【解决方案8】:

          获取变量中的值,然后像这样分离它的扩展名。

          var find_file_ext=document.getElementById('filename').value;
          var file_ext=/[^.]+$/.exec(find_file_ext); 
          

          这会对你有所帮助。

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

            • 重复回答
            【解决方案10】:

            试试这个。可以解决你的问题。

            var file_name_string = "file.name.string.png"
            
            var file_name_array = file_name_string.split(".");
            var file_extension = file_name_array[file_name_array.length - 1];
            

            问候

            【讨论】:

            • @itsbruce 使用“更好”的术语和投票有点糟糕......这行得通。附言如果问题是“从文件名中获取扩展名的最佳方法是什么” - 我完全同意......
            • 我没有投反对票。
            猜你喜欢
            • 2013-06-02
            • 2011-10-23
            • 1970-01-01
            • 2011-03-10
            • 2011-05-14
            • 2015-12-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多