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.

640voto

John Hartsock Punkte 82122

Ich bin nicht sicher, was schneller wäre, aber es wäre zuverlässiger, wenn es um Erweiterungen wie .jpeg o .html

x.replace(/\.[^/.]+$/, "")

601voto

Jibesh Patra Punkte 5094

Sur node.js kann der Name der Datei ohne die Erweiterung wie folgt ermittelt werden.

const path = require('path');
const filename = 'hello.html';

path.parse(filename).name;     //=> "hello"
path.parse(filename).ext;      //=> ".html"
path.parse(filename).base; //=> "hello.html"

Weitere Erläuterungen unter Node.js Dokumentation Seite.

295voto

Marek Sapota Punkte 19500

Wenn Sie die Länge der Verlängerung kennen, können Sie mit x.slice(0, -4) (wobei 4 die drei Zeichen der Erweiterung und der Punkt sind).

Wenn Sie die Länge nicht kennen @John Hartsock regex wäre der richtige Ansatz.

Wenn Sie keine regulären Ausdrücke verwenden möchten, können Sie dies versuchen (weniger performant):

filename.split('.').slice(0, -1).join('.')

Beachten Sie, dass dies bei Dateien ohne Erweiterung fehlschlägt.

139voto

Jeff B Punkte 29573

x.length-4 berücksichtigt nur Erweiterungen von 3 Zeichen. Was, wenn Sie haben filename.jpeg o filename.pl ?

EDIT :

Um zu antworten... sicher, wenn Sie immer eine Erweiterung von .jpg , x.length-4 würde sehr gut funktionieren.

Wenn Sie jedoch die Länge Ihrer Verlängerung nicht kennen, ist eine der zahlreichen Lösungen besser/robuster.

x = x.replace(/\..+$/, '');

OR

x = x.substring(0, x.lastIndexOf('.'));

OR

x = x.replace(/(.*)\.(.*?)$/, "$1");

OR (in der Annahme, dass der Dateiname nur einen Punkt enthält)

parts = x.match(/[^\.]+/);
x = parts[0];

OR (auch mit nur einem Punkt)

parts = x.split(".");
x = parts[0];

75voto

jakubiszon Punkte 2377

Ich mag diesen Text, weil er ein Einzeiler ist, der nicht allzu schwer zu lesen ist:

filename.substring(0, filename.lastIndexOf('.')) || filename

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