507 Stimmen

Wie schneidet man eine Dateierweiterung aus einem String in JavaScript ab?

Zum Beispiel, wenn man annimmt, dass x = filename.jpg Ich möchte eine filename , donde filename kann ein beliebiger Dateiname sein (nehmen wir zur Vereinfachung an, dass der Dateiname nur [a-zA-Z0-9-_] enthält).

Ich sah x.substring(0, x.indexOf('.jpg')) en DZone Schnipsel würde aber nicht x.substring(0, x.length-4) besser abschneiden? Darum, length ist eine Eigenschaft und führt keine Zeichenprüfung durch, während indexOf() ist eine Funktion und führt eine Zeichenprüfung durch.

8voto

willy wonka Punkte 1113

Wenn Sie eine Variable verarbeiten müssen, die den vollständigen Pfad enthält (z. B.: thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg" ) und Sie wollen nur "Dateiname" zurückgeben, können Sie verwenden:

theName = thePath.split("/").slice(-1).join().split(".").shift();

wird das Ergebnis sein theName == "Dateiname" ;

Um es auszuprobieren, schreiben Sie den folgenden Befehl in das Konsolenfenster Ihres Chrome-Debuggers: window.location.pathname.split("/").slice(-1).join().split(".").shift()

Wenn Sie nur den Dateinamen und seine Erweiterung verarbeiten müssen (z. B: theNameWithExt = "filename.jpg" ):

theName = theNameWithExt.split(".").shift();

wird das Ergebnis sein theName == "Dateiname" das gleiche wie oben;

Notes :

  1. Die erste ist etwas langsamer, weil sie mehr Leistung erbringt. Operationen durchführt; aber es funktioniert in beiden Fällen, d.h. es kann den den Dateinamen ohne Erweiterung aus einer gegebenen Zeichenkette, die einen Pfad oder einen Dateinamen mit ex enthält. Die zweite funktioniert nur, wenn die angegebene Variable einen Dateinamen mit ext enthält, wie filename.ext, ist aber etwas schneller.
  2. Beide Lösungen funktionieren sowohl für lokale als auch für Serverdateien;

Aber ich kann weder etwas über den Leistungsvergleich mit anderen Antworten noch über die Browser- oder Betriebssystemkompatibilität sagen.

Arbeitsausschnitt 1: der vollständige Pfad

var thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg";
theName = thePath.split("/").slice(-1).join().split(".").shift();
alert(theName);

Arbeitsausschnitt 2: der Dateiname mit Erweiterung

var theNameWithExt = "filename.jpg";
theName = theNameWithExt.split("/").slice(-1).join().split(".").shift();
alert(theName);

Arbeitsbeispiel 2: der Dateiname mit doppelter Erweiterung

var theNameWithExt = "filename.tar.gz";
theName = theNameWithExt.split("/").slice(-1).join().split(".").shift();
alert(theName);

7voto

Chad Johnson Punkte 20015

Hier ist eine weitere Regex-basierte Lösung:

filename.replace(/\.[^.$]+$/, '');

Dabei sollte nur das letzte Segment abgeschnitten werden.

7voto

Dugh Punkte 171

Eine einfache:

var n = str.lastIndexOf(".");
return n > -1 ? str.substr(0, n) : str;

6voto

Yas Punkte 4057
var fileName = "something.extension";
fileName.slice(0, -path.extname(fileName).length) // === "something"

6voto

basic6 Punkte 3313

Bei der akzeptierten Antwort wird nur der letzte Erweiterungsteil entfernt ( .jpeg ), was in den meisten Fällen eine gute Wahl sein dürfte.

Ich musste einmal alle Erweiterungen entfernen ( .tar.gz ) und die Dateinamen durften keine Punkte enthalten (also 2015-01-01.backup.tar wäre kein Problem):

var name = "2015-01-01_backup.tar.gz";
name.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