JS:从string中的path中删除文件名的最佳方法?

我有string格式如下:
path/to/a/filename.txt

现在我想做一些string操作,这使得我可以非常有效地从这段代码中删除“filename.txt”部分。 换句话说,我希望我的string变成这样:
path/to/a/

什么是最有效的方法来做到这一点? 目前我正在分割string,并重新连接除了最后一个单独的元素,但我感觉这是一个真正的,低效的方法来做到这一点。 这是我目前效率低下的代码:

 res.getPath = function(file) { var elem = file.split("/"); var str = ""; for (var i = 0; i < elem.length-1; i++) str += elem[i] + "/"; return str; } 

使用lastIndexOf()查找最后一个斜杠的位置,并使用substring()获取斜杠前面的部分。

 str.substring(0, str.lastIndexOf("/")); 

这个怎么样:

 "path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/" 
 function splitPath(path) { var dirPart, filePart; path.replace(/^(.*\/)?([^/]*)$/, function(_, dir, file) { dirPart = dir; filePart = file; }); return { dirPart: dirPart, filePart: filePart }; } 

那里好多了

如果这是从file upload表单处理文件名,则HTML5规范build议使用以下代码:

 function extractFilename(path) { if (path.substr(0, 12) == "C:\\fakepath\\") return path.substr(12); // modern browser var x; x = path.lastIndexOf('/'); if (x >= 0) // Unix-based path return path.substr(x+1); x = path.lastIndexOf('\\'); if (x >= 0) // Windows-based path return path.substr(x+1); return path; // just the filename } 

参考: http : //www.w3.org/TR/html5/number-state.html#file-upload-state http://www.w3.org/TR/html5/forms.html#file-upload-state – (types=文件)

 function getDirname(pathname, separator) { var parts = pathname.split(separator); if (parts[parts.length - 1].indexOf('.') > -1) { return parts.slice(0, -1).join(separator) } return pathname; } 

用法:

 var dir = getDirname(url.parse(request.url).pathname, '/'); 

 var dir = getDirname(path.join('foo', 'bar', 'text.txt'), path.sep); 

test/dir/lib/file- _09.ege.jpg将被 test/dir/lib/

file- _09.ege.jpg将会是file- _09.ege.jpg

  console.log("test - "+getPath('test/dir/lib/file- _09.ege.jpg')); function getPath(path){ path = path.match(/(^.*[\\\/]|^[^\\\/].*)/i); if(path != null){ return path[0]; }else{ return false; } } 
 console.log("test - "+getPath('test/dir/lib/file- _09.ege.jpg')); function getPath(path){ path = path.match(/(^.*[\\\/]|^[^\\\/].*)/i); if(path != null){ return path[0]; }else{ return false; } }