Angenommen x = filename.jpg
, ich möchte herausfinden filename
, wo filename
sich ein beliebiger Dateiname befinden könnte (Nehmen wir an, der Dateiname enthält zur Vereinfachung nur [a-zA-Z0-9-_].).
Ich habe x.substring(0, x.indexOf('.jpg'))
auf DZone Snippets gesehen , würde aber nicht x.substring(0, x.length-4)
besser abschneiden ? Denn length
ist eine Eigenschaft und führt keine Zeichenprüfung durch, während indexOf()
es sich um eine Funktion handelt und eine Zeichenprüfung durchführt.
Antworten:
Wenn Sie die Länge der Erweiterung kennen, können Sie verwenden
x.slice(0, -4)
(wobei 4 die drei Zeichen der Erweiterung und der Punkt sind).Wenn Sie die Länge nicht kennen, wäre @John Hartsock Regex der richtige Ansatz.
Wenn Sie keine regulären Ausdrücke verwenden möchten, können Sie dies versuchen (weniger performant):
Beachten Sie, dass dies bei Dateien ohne Erweiterung fehlschlägt.
quelle
.jpg
. Ich habe nach etwas wie Ruby's gesuchtx[0..-5]
und sehex.slice(0, -4)
toll aus! Vielen Dank! Und vielen Dank an alle anderen für all die anderen robusten Alternativen!"picture.jpeg".slice(0, -4)
-> "Bild".Ich bin mir nicht sicher, was schneller funktionieren würde, aber dies wäre zuverlässiger, wenn es um Erweiterungen wie
.jpeg
oder geht.html
quelle
In node.js kann der Name der Datei ohne die Erweiterung wie folgt abgerufen werden.
Eine weitere Erklärung auf Node.js Dokumentation Seite.
quelle
var parsed = path.parse(filename)
von gefolgtpath.join(parsed.dir, parsed.name)
.let base = path.basename( file_path, path.extname( file_path ) )
.x.length-4
berücksichtigt nur Erweiterungen von 3 Zeichen. Was ist, wenn Sie habenfilename.jpeg
oderfilename.pl
?BEARBEITEN:
Um zu antworten ... sicher, wenn Sie immer eine Erweiterung von haben
.jpg
,x.length-4
würde gut funktionieren.Wenn Sie jedoch die Länge Ihrer Erweiterung nicht kennen, sind verschiedene Lösungen besser / robuster.
x = x.replace(/\..+$/, '');
ODER
x = x.substring(0, x.lastIndexOf('.'));
ODER
x = x.replace(/(.*)\.(.*?)$/, "$1");
ODER (mit der Annahme, dass der Dateiname nur einen Punkt hat)
ODER (auch mit nur einem Punkt)
quelle
var parts = full_file.split("."); var ext = parts[parts.length-1]; var file = parts.splice(0,parts.length-1).join(".");
x = x.substr(0, x.lastIndexOf('.'));
- Du meintest wahrscheinlichx = x.substring(0, x.lastIndexOf('.'));
?Sie können möglicherweise davon ausgehen, dass der letzte Punkt das Erweiterungsbegrenzer ist.
Wenn die Datei keine Erweiterung hat, wird eine leere Zeichenfolge zurückgegeben. Um dies zu beheben, verwenden Sie diese Funktion
quelle
var f = x.substr(0, x.lastIndexOf('.')) || x;
Dies funktioniert, weil eine leere Zeichenfolge falsch ist und daher x zurückgibt.Ich mag dieses, weil es ein Einzeiler ist, der nicht zu schwer zu lesen ist:
quelle
In Node.js-Versionen vor 0.12.x:
path.basename(filename, path.extname(filename))
Natürlich funktioniert dies auch in 0.12.x und höher.
quelle
path.parse
Antwort ist einfacher.Dies funktioniert auch dann, wenn das Trennzeichen nicht in der Zeichenfolge vorhanden ist.
Kann auch wie folgt als Einzeiler verwendet werden:
EDIT: Dies ist eine effizientere Lösung:
quelle
Ich weiß nicht, ob es eine gültige Option ist, aber ich benutze diese:
Es ist nicht nur eine Operation, die ich kenne, aber zumindest sollte sie immer funktionieren!
UPDATE: Wenn Sie einen Oneliner möchten, sind Sie hier:
(name.split('.').slice(0, -1)).join('.')
quelle
hello.name.txt
kehren zurückhello, name
Ein weiterer Einzeiler:
quelle
Hier ist eine weitere Regex-basierte Lösung:
Dies sollte nur das letzte Segment abschneiden.
quelle
Einfache Sache:
quelle
Die akzeptierte Antwort entfernt nur den letzten Erweiterungsteil (
.jpeg
), was in den meisten Fällen eine gute Wahl sein kann.Ich musste einmal alle Erweiterungen entfernen (
.tar.gz
) und die Dateinamen waren darauf beschränkt, keine Punkte zu enthalten (2015-01-01.backup.tar
wäre also kein Problem):quelle
quelle
path/name.ext
->paht/name
anstatt nur zurückzukehrenname
, aber ich würde es lieber damit machen,fs.parse
obwohl es etwas ausführlicher ist: stackoverflow.com/a/59576950/895245Wenn Sie eine Variable verarbeiten müssen, die den vollständigen Pfad enthält (Beispiel:)
thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
und nur "Dateiname" zurückgeben möchten, können Sie Folgendes verwenden:das Ergebnis ist theName == "filename" ;
Um es zu versuchen, 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 (z. B. :) verarbeiten müssen
theNameWithExt = "filename.jpg"
:das Ergebnis ist der Name == "Dateiname" , wie oben;
Anmerkungen:
Aber ich kann weder über den Leistungsvergleich mit anderen Antworten noch über die Browser- oder Betriebssystemkompatibilität etwas sagen.
Arbeitsausschnitt 1: Der vollständige Pfad
Arbeitsausschnitt 2: Der Dateiname mit der Erweiterung
Arbeitsausschnitt 2: Der Dateiname mit doppelter Erweiterung
quelle
Obwohl es ziemlich spät ist, werde ich einen weiteren Ansatz hinzufügen, um den Dateinamen ohne Erweiterung mit einfachen alten JS- zu erhalten.
path.replace(path.substr(path.lastIndexOf('.')), '')
quelle
path.split('.').pop()
für ein Teil DateierweiterungenNode.js entfernt die Erweiterung aus dem vollständigen Pfadverwaltungsverzeichnis
https://stackoverflow.com/a/31615711/895245 zum Beispiel hat
path/hello.html
->hello
, aber wenn Sie wollenpath/hello.html
->path/hello
, können Sie dies verwenden:gibt auch das Verzeichnis aus:
https://stackoverflow.com/a/36099196/895245 erreicht dies ebenfalls, aber ich finde diesen Ansatz etwas semantisch ansprechender.
Getestet in Node.js v10.15.2.
quelle
Hier bieten sich reguläre Ausdrücke an! Die
.replace()
Methode von Javascript verwendet einen regulären Ausdruck, und Sie können diesen verwenden, um das zu erreichen, was Sie wollen:quelle
Ein weiterer Einzeiler - wir nehmen an, dass unsere Datei ein JPG-Bild ist >> Beispiel: var yourStr = 'test.jpg';
quelle
Sie können
path
zum Manövrieren verwenden.Ausgabe
quelle
quelle
Dies ist der Code, mit dem ich die Erweiterung aus einem Dateinamen entferne, ohne entweder Regex oder IndexOf zu verwenden (IndexOf wird in IE8 nicht unterstützt). Es wird davon ausgegangen, dass die Erweiterung ein beliebiger Text nach dem letzten '.' Ist. Charakter.
Es funktioniert für:
Hier ist der Code:
quelle
hello.tar.gz
, Ausgabe isthellotar
.Ich würde so etwas wie x.substring (0, x.lastIndexOf ('.')) Verwenden. Wenn Sie Leistung erbringen möchten, sollten Sie sich überhaupt nicht für Javascript entscheiden :-p Nein, eine weitere Aussage spielt für 99,99999% aller Zwecke keine Rolle.
quelle