【问题标题】:filename extension in javascriptjavascript中的文件扩展名
【发布时间】:2012-02-26 06:34:56
【问题描述】:

我有一个代码可以让我知道文件名的扩展名。它通过使用匹配“。”的正则表达式来工作:

new_name = e.timeStamp + "_." +
      EscapeHtml (file.name.replace (/ ^. *? \. ([A-zA-Z0-9] +) $ /, "$ 1"));

它适用于像这样的简单名称:

name = asdasdasd.mp3

但是当文件名有多个“.”时就不行了,比如:

avi.conn.mp3

我将如何修改我的代码以应对这些更复杂的情况?

【问题讨论】:

  • avi.conn.mp3 的期望输出是什么?你想只提取mp3conn.mp3 吗?我尝试了你的正则表达式,并且(一旦我删除了空格)它从avi.conn.mp3返回mp3
  • 它工作正常,只需删除正则表达式中不必要的空格。试试看alert('avi.conn.mp3'.replace(/^.*?\.([A-zA-Z0-9]+)$/, "$1"))​

标签: javascript filenames


【解决方案1】:

只需使用.split():

var components = filename.split('.');
var extension = components[components.length - 1];

【讨论】:

    【解决方案2】:

    path module of nodejs 提供了更好的正则表达式:

    var splitDeviceRe = 
        /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?([\s\S]*?)$/;
    
    // Regex to split the tail part of the above into [*, dir, basename, ext]
    var splitTailRe = 
        /^([\s\S]+[\\\/](?!$)|[\\\/])?((?:\.{1,2}$|[\s\S]+?)?(\.[^.\/\\]*)?)$/;
    
    function splitPath(filename) {
        // Separate device+slash from tail
        var result = splitDeviceRe.exec(filename),
            device = (result[1] || '') + (result[2] || ''),
            tail = result[3] || '';
        // Split the tail into dir, basename and extension
        var result2 = splitTailRe.exec(tail),
            dir = result2[1] || '',
            basename = result2[2] || '',
            ext = result2[3] || '';
        return [device, dir, basename, ext];
    }
    
    function extname(path) {
        return splitPath(path)[3];
    }
    

    【讨论】:

    • 坦克所有,我想要它在 1 行 new_name = e.timeStamp + "_." + EscapeHtml (file.name.replace (/^.*?\.([A-zA-Z0-9] +) $/, "$1"));示例坦克
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2013-12-19
    • 2011-05-07
    相关资源
    最近更新 更多