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.

870voto

nickf Punkte 517253
var filename = fullPath.replace(/^.*[\\\/]/, '')

Damit werden sowohl \ als auch / in Pfaden behandelt

203voto

Danpe Punkte 17780

Ich habe alle Antworten, die hier gegeben wurden, der Einfachheit halber getestet:

var substringTest = function (str) {
    return str.substring(str.lastIndexOf('/')+1);
}

var replaceTest = function (str) {
    return str.replace(/^.*(\\|\/|\:)/, '');
}

var execTest = function (str) {
    return /([^\\]+)$/.exec(str)[1];
}

var splitTest = function (str) {
    return str.split('\\').pop().split('/').pop();
}

substringTest took   0.09508600000000023ms
replaceTest   took   0.049203000000000004ms
execTest      took   0.04859899999999939ms
splitTest     took   0.02505500000000005ms

Und der Gewinner ist der Split und Pop stilvolle Antwort, Dank an bobince !

183voto

RobLoach Punkte 1783

In Node.js können Sie mit Das Parse-Modul von Path ...

var path = require('path');
var file = '/home/user/dir/file.txt';

var filename = path.parse(file).base;
//=> 'file.txt'

94voto

bobince Punkte 512550

Von welcher Plattform kommt der Pfad? Windows-Pfade sind anders als POSIX-Pfade sind anders als Mac OS 9-Pfade sind anders als RISC OS-Pfade sind anders...

Wenn es sich um eine Webanwendung handelt, bei der der Dateiname von verschiedenen Plattformen stammen kann, gibt es keine einheitliche Lösung. Ein vernünftiger Ansatz ist jedoch, sowohl "\" (Windows) als auch "/" (Linux/Unix/Mac und auch eine Alternative unter Windows) als Pfadseparatoren zu verwenden. Hier ist eine Nicht-RegExp-Version für zusätzlichen Spaß:

var leafname= pathname.split('\\').pop().split('/').pop();

33voto

user129661 Punkte 319

Ates, Ihre Lösung schützt nicht vor einer leeren Zeichenkette als Eingabe. In diesem Fall schlägt sie fehl mit TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties .

bobince, hier ist eine Version von nickf, die mit DOS-, POSIX- und HFS-Pfadbegrenzern (und leeren Strings) umgehen kann:

return fullPath.replace(/^.*(\\|\/|\:)/, '');

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