2012-02-26 48 views
0

我有一個代碼,它使我能夠擴展文件的名稱。它的工作原理是利用一個匹配的正則表達式「」:在JavaScript中的文件擴展名

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

它適用於簡單的名字是這樣的:

name = asdasdasd.mp3 

但是當文件名中有一個以上不工作「。」,如:

avi.conn.mp3 

我該如何修改我的代碼以應付這些更復雜的情況?

+0

什麼是'avi.conn.mp3'所需輸出?你想只提取'mp3'或'conn.mp3'嗎?我嘗試了你的正則表達式,並且(一旦我刪除了空格)它就從'avi.conn.mp3'返回了'mp3'。 – nnnnnn 2012-02-26 06:47:01

+0

它工作正常,只是在正則表達式中刪除不必要的空格。試一試'alert('avi.conn.mp3'.replace(/^.*?\。([A-zA-Z0-9] +)$ /,「$ 1」))' – Cheery 2012-02-26 06:49:34

回答

5

只需使用.split()

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

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]; 
} 
+0

坦克全部,我想因爲它在1行 new_name = e.timeStamp +「_」。 + EscapeHtml(file.name.replace(/ ^。*?\。([A-zA-Z0-9] +)$ /,「$ 1」)); exmplte tanks – user1190216 2012-02-26 07:53:18