440 Stimmen

Wie erhält man den Dateinamen aus einem vollständigen Pfad mit JavaScript?

Gibt es eine Möglichkeit, den letzten Wert (basierend auf dem Symbol "\") aus einem vollständigen Pfad zu erhalten?

Beispiel:

C:\Documents and Settings\img\recycled log.jpg

In diesem Fall möchte ich nur die recycled log.jpg aus dem vollständigen Pfad in JavaScript.

26voto

Epperlyg Punkte 217

Die folgende JavaScript-Codezeile gibt Ihnen den Dateinamen.

var z = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
alert(z);

15voto

Eine weitere

var filename = fullPath.split(/[\\\/]/).pop();

Ici geteilt haben einen regulären Ausdruck mit einem Charakterklasse
Die beiden Zeichen müssen mit '\' getrennt werden.

Oder verwenden Sie aufzuteilendes Array

var filename = fullPath.split(['/','\\']).pop();

Auf diese Weise lassen sich bei Bedarf dynamisch weitere Trennzeichen in ein Array einfügen.
Wenn fullPath explizit durch eine Zeichenkette in Ihrem Code gesetzt wird, muss es den Backslash vermeiden !
Wie "C:\\Documents and Settings\\img\\recycled log.jpg"

12voto

Sebastian Simon Punkte 16428

Es besteht keine Notwendigkeit, Backslashes besonders zu behandeln; die meisten Antworten behandeln keine Suchparameter.

Der moderne Ansatz besteht darin, einfach die URL API und erhalten die pathname Eigentum. Die API normalisiert Backslashes zu Schrägstrichen.

Um das Ergebnis zu analysieren %20 in ein Leerzeichen umzuwandeln, übergeben Sie es einfach an decodeURIComponent .

const getFileName = (fileName) => new URL(fileName).pathname.split("/").pop();

// URLs need to have the scheme portion, e.g. `file://` or `https://`.
console.log(getFileName("file://C:\\Documents and Settings\\img\\recycled log.jpg")); // "recycled%20log.jpg"
console.log(decodeURIComponent(getFileName("file://C:\\Documents and Settings\\img\\recycled log.jpg"))); // "recycled log.jpg"
console.log(getFileName("https://example.com:443/path/to/file.png?size=480")); // "file.png"

.as-console-wrapper { max-height: 100% !important; top: 0; }

Hinzufügen einer .filter(Boolean) vor dem .pop() wenn Sie immer das Letzte wollen nicht leere Teil des Pfades (z.B. file.png von https://example.com/file.png/ ).

Wenn Sie nur eine relative URL haben, aber trotzdem nur den Dateinamen erhalten wollen, verwenden Sie die zweites Argument der URL Konstrukteur um einen Basisursprung zu übergeben. "https://example.com" reicht aus: new URL(fileName, "https://example.com") . Es ist auch möglich, voranzustellen "https://" zu Ihrem fileName -die URL Der Konstruktor akzeptiert https://path/to/file.ext als eine gültige URL.

10voto

Ates Goral Punkte 132294

Nicht prägnanter als nickf's responder , aber dieser "extrahiert" die Antwort direkt, anstatt unerwünschte Teile durch eine leere Zeichenkette zu ersetzen:

var filename = /([^\\]+)$/.exec(fullPath)[1];

9voto

Raymond Sin Punkte 91

Eine Frage mit dem Titel "Dateinamen ohne Erweiterung abrufen" wird hier gestellt, aber es gibt keine Lösung dafür. Hier ist die Lösung, abgewandelt von Bobbies Lösung.

var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0];

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