81 Stimmen

JS: Optimale Methode zum Entfernen eines Dateinamens aus einem Pfad in einer Zeichenfolge?

Ich habe die Zeichenfolgen wie folgt formatiert:
path/to/a/filename.txt

Jetzt möchte ich eine Stringmanipulation durchführen, die es mir ermöglicht, den Teil "Dateiname.txt" sehr effizient aus diesem Code zu entfernen. Mit anderen Worten, ich möchte, dass meine Zeichenkette wie folgt aussieht:
path/to/a/

Wie lässt sich dies am effizientesten bewerkstelligen? Derzeit bin ich die Zeichenfolge zu teilen und die einzelnen Elemente mit Ausnahme der letzten wieder zu verbinden, aber ich habe das Gefühl, dies ist eine wirklich, WIRKLICH ineffiziente Weise, es zu tun. Hier ist meine aktuelle, ineffiziente Code:

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

0 Stimmen

1 Stimmen

split ist zwar sehr schnell, aber definitiv nicht der schnellste Weise...

1voto

André Fiedler Punkte 1009
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;
}

Verwendung:

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

.

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

0voto

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

dort ist es besser

0 Stimmen

Ich verwende JS außerhalb eines Browsers, und es gibt mir eine "SyntaxError: unterminated character class ["

0voto

Grodriguez Punkte 21042

Wenn ein Dateiname aus einem Datei-Upload-Formular verarbeitet werden soll, empfiehlt die HTML5-Spezifikation den folgenden Code:

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
}

Referenz: 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)

0voto

test/dir/lib/file- _09.ege.jpg - Wird zu - test/dir/lib/

file- _09.ege.jpg - Wird zu - 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;
            }            
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X