Подтвердить что ты не робот

JS: Самый оптимизированный способ удалить имя файла из пути в строке?

У меня есть строки, отформатированные следующим образом:
path/to/a/filename.txt

Теперь я хотел бы сделать некоторые манипуляции с строкой, которые позволяют мне очень эффективно удалить часть "filename.txt" из этого кода. Другими словами, я хочу, чтобы моя строка стала такой:
path/to/a/

Какой самый эффективный способ сделать это? В настоящее время я разделяю строку и повторно соединяю отдельные элементы, за исключением последней, но я чувствую, что это действительно ДЕЙСТВИТЕЛЬНО неэффективный способ сделать это. Здесь мой текущий, неэффективный код:

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

Ответ 1

Используйте lastIndexOf(), чтобы найти позицию последней косой черты и получить деталь перед косой чертой с помощью подстроки().

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

Ответ 2

Как насчет этого:

"path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/"

Ответ 3

function splitPath(path) {
  var dirPart, filePart;
  path.replace(/^(.*\/)?([^/]*)$/, function(_, dir, file) {
    dirPart = dir; filePart = file;
  });
  return { dirPart: dirPart, filePart: filePart };
}

там, что лучше

Ответ 4

Если это необходимо для обработки имени файла из формы загрузки файла, спецификация HTML5 рекомендует следующий код:

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-(type=file)

Ответ 5

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

Ответ 6

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