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; } }