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

Lesezeit: 3 Minuten

Benutzer-Avatar
DaVince

Ich habe Zeichenfolgen wie folgt formatiert:

path/to/a/filename.txt

Jetzt möchte ich einige String-Manipulationen vornehmen, die es mir ermöglichen, den Teil “filename.txt” sehr effizient aus diesem Code zu entfernen. Mit anderen Worten, ich möchte, dass meine Zeichenfolge so wird:

path/to/a/

Was ist der effizienteste Weg, dies zu tun? Derzeit teile ich die Saite und verbinde die einzelnen Elemente bis auf das letzte wieder, aber ich habe das Gefühl, dass dies eine wirklich, WIRKLICH ineffiziente Methode ist. Hier ist mein aktueller, ineffizienter Code:

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

  • Sehr ähnlich: stackoverflow.com/questions/2161511

    – Gumbo

    2. Februar 2010 um 20:12 Uhr

  • split ist eigentlich sehr schnell, aber definitiv nicht das am schnellsten Weg…

    – D’Arcy Rittich

    2. Februar 2010 um 20:15 Uhr


Verwenden Sie lastIndexOf(), um die Position des letzten Schrägstrichs zu finden, und erhalten Sie den Teil vor dem Schrägstrich mit substring().

str.substring(0, str.lastIndexOf("https://stackoverflow.com/"));

  • Beachten Sie, dass dies bei URLs wie dieser eine Zeichenfolge mit dem Dateinamen zurückgibt: http://example.com/index.php?p=about/location oder http://ex.co/#/14185

    – Kroltan

    2. Januar 2014 um 7:39 Uhr

  • Dies funktioniert nicht mit Pfad in Form von /www/test

    – André Fiedler

    25. Juli 2014 um 11:27 Uhr

  • Wenn ich die letzten beiden Indizes entfernen möchte, was kann ich dann tun? dh; Ich muss sowohl Branch als auch Index aus entfernen localhost:2698/Zweig/Index

    – Metapher

    31. Mai 2016 um 12:22 Uhr


  • sieht so aus, als wäre es ein Pfad zu einer Datei, keine URL

    – Martijn Scheffer

    13. Dezember 2018 um 11:33 Uhr

Benutzer-Avatar
Richie Bendall

Wenn Sie Node.js verwenden:

const path = require("path")
const removeFilePart = dirname => path.parse(dirname).dir

removeFilePart("/a/b/c/d.txt")
// Returns "/a/b/c"

  • Welchen Vorteil hat dies gegenüber der einfachen Verwendung path.dirname?

    – Jake Holzinger

    27. Dezember 2019 um 22:24 Uhr

  • @JakeHolzinger path.dirname analysiert Dateien anders, wenn kein Root-Pfad angegeben wird: github.com/nodejs/node/issues/18655

    – Richie Bendall

    27. Dezember 2019 um 22:55 Uhr


Wie wäre es damit:

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

  • Das ist nicht effizient, Sie erstellen ein Array, entfernen Elemente, erstellen eine Zeichenfolge neu usw., es sieht einfach irgendwie cool aus

    – Martijn Scheffer

    13. Dezember 2018 um 11:32 Uhr

Im Knoten können Sie verwenden path.dirname

const path = require('path')

fullFilePath="/some/given/path/to-a-file.txt" 

directoryPath = path.dirname(fullFilePath) 

console.log(directoryPath)       // ===> '/some/given/path'

str = str.split("https://stackoverflow.com/")
str.pop()
str.join("https://stackoverflow.com/") + "https://stackoverflow.com/"

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

da ist es besser

Benutzer-Avatar
Gemeinschaft

Wenn hier 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("https://stackoverflow.com/");
  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
}

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

1059000cookie-checkJS: Optimierteste Methode zum Entfernen eines Dateinamens aus einem Pfad in einer Zeichenfolge?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy