Siehe Code:
var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //returns xsl
getFileExtension(file2); //returns doc
function getFileExtension(filename) {
/*TODO*/
}
javascript
file-extension
Sergio del Amo
quelle
quelle
return filename.substring(0,1) === '.' ? '' : filename.split('.').slice(1).pop() || '';
Dies kümmert sich auch um.file
(Unix versteckt, glaube ich) Arten von Dateien. Das ist, wenn Sie es als Einzeiler behalten möchten, was für meinen Geschmack etwas chaotisch ist.Halte es einfach :)
Bearbeiten:
Dies ist eine weitere Nicht-Regex-Lösung, die meiner Meinung nach effizienter ist:
Es gibt einige Eckfälle, die in der folgenden Antwort von VisioN besser behandelt werden , insbesondere Dateien ohne Erweiterung (
.htaccess
usw. enthalten).Es ist sehr performant und behandelt Eckfälle wohl besser, indem es
""
anstelle der vollständigen Zeichenfolge zurückkehrt, wenn vor dem Punkt kein Punkt oder keine Zeichenfolge steht. Es ist eine sehr gut gestaltete Lösung, wenn auch schwer zu lesen. Stecke es in deine Helferbibliothek und benutze es einfach.Alte Bearbeitung:
Eine sicherere Implementierung, wenn Sie auf Dateien ohne Erweiterung oder versteckte Dateien ohne Erweiterung stoßen (siehe VisioNs Kommentar zu Toms Antwort oben), wäre etwas in dieser Richtung
Wenn
a.length
es eine ist, ist es eine sichtbare Datei ohne Erweiterung, dh. DateiWenn
a[0] === ""
unda.length === 2
es ist eine versteckte Datei ohne Erweiterung, dh. .htaccessIch hoffe, dies hilft, Probleme mit den etwas komplexeren Fällen zu klären. In Bezug auf die Leistung glaube ich, dass diese Lösung in den meisten Browsern etwas langsamer als Regex ist . Für die meisten gängigen Zwecke sollte dieser Code jedoch perfekt verwendbar sein.
quelle
filename
tatsächlich keine Erweiterung gibt? Würde dies nicht einfach den Basisdateinamen zurückgeben, was irgendwie schlecht wäre?Die folgende Lösung ist schnell und kurz genug, um in Massenoperationen verwendet zu werden und zusätzliche Bytes zu sparen:
Hier ist eine weitere einzeilige universelle Lösung ohne Regexp:
Beide funktionieren korrekt mit Namen ohne Erweiterung (z. B. myfile ) oder beginnend mit
.
dot (z. B. .htaccess ):Wenn Sie sich für die Geschwindigkeit interessieren, können Sie den Benchmark ausführen und überprüfen, ob die bereitgestellten Lösungen die schnellsten sind, während die kurze enorm schnell ist:
Wie der kurze funktioniert:
String.lastIndexOf
Methode gibt die letzte Position des Teilstrings (dh"."
) in der angegebenen Zeichenfolge (dhfname
) zurück. Wenn der Teilstring nicht gefunden wird, wird die Methode zurückgegeben-1
.-1
und0
, die sich jeweils auf Namen ohne Erweiterung (z. B."name"
) und auf Namen beziehen , die mit Punkt (z".htaccess"
. B. ) beginnen.>>>
) wirkt sich bei Verwendung mit Null auf negative Zahlen aus, die-1
in4294967295
und-2
nach transformiert werden.4294967294
Dies ist nützlich, um den Dateinamen in den Randfällen unverändert zu lassen (eine Art Trick hier).String.prototype.slice
extrahiert den Teil des Dateinamens aus der Position, die wie beschrieben berechnet wurde. Wenn die Positionsnummer größer als die Länge der Zeichenfolge ist, wird die Methode zurückgegeben""
.Wenn Sie eine klarere Lösung wünschen, die auf die gleiche Weise funktioniert (plus mit zusätzlicher Unterstützung des vollständigen Pfads), überprüfen Sie die folgende erweiterte Version. Diese Lösung ist langsamer als frühere Einzeiler, aber viel einfacher zu verstehen.
Alle drei Varianten sollten in jedem Webbrowser auf der Clientseite funktionieren und können auch im serverseitigen NodeJS-Code verwendet werden.
quelle
Getestet mit
Ebenfalls
quelle
quelle
quelle
quelle
quelle
Code
Prüfung
Beachten Sie, dass das Fragment ohne Abfrage möglicherweise noch vorhanden ist.
JSLint
0 Warnungen.
quelle
Schnell und funktioniert korrekt mit Pfaden
Einige Randfälle
Lösungen, die Split verwenden, sind langsam und Lösungen mit lastIndexOf behandeln keine Randfälle.
quelle
.exec()
. Ihr Code wird besser sein als(filename.match(/[^\\/]\.([^\\/.]+)$/) || [null]).pop()
.Ich wollte das nur teilen.
Dies hat jedoch den Nachteil, dass Dateien ohne Erweiterung die letzte Zeichenfolge zurückgeben. Aber wenn Sie dies tun, wird dies alles beheben:
quelle
slice
, bezieht sich die Methode eher auf Arrays als auf Strings. Für Saitensubstr
odersubstring
wird funktionieren.String.prototype.slice
eineArray.prototype.slice
Methode gibt und auch so, dass es irgendwie funktioniertIch bin sicher, dass jemand meinen Code in Zukunft minimieren und / oder optimieren kann und wird. Ab sofort bin ich jedoch zu 200% davon überzeugt, dass mein Code in jeder einzelnen Situation funktioniert (z. B. nur mit dem Dateinamen , mit relativen , root-relativen und absoluten URLs, mit Fragment-
#
Tags, mit Abfragezeichenfolgen?
und was auch immer Andernfalls können Sie sich dafür entscheiden, fehlerfrei und punktgenau darauf zu werfen.Weitere Informationen finden Sie unter: https://projects.jamesandersonjr.com/web/js_projects/get_file_extension_test.php
Hier ist die JSFiddle: https://jsfiddle.net/JamesAndersonJr/ffcdd5z3/
Nicht zu selbstsicher zu sein oder meine eigene Trompete zu blasen, aber ich habe keinen Codeblock für diese Aufgabe gesehen (die 'richtige' Dateierweiterung inmitten einer Reihe von anderen zu finden
function
Eingabeargumente), der so gut funktioniert wie dies.Hinweis: Wenn für die angegebene Eingabezeichenfolge keine Dateierweiterung vorhanden ist, wird standardmäßig einfach eine leere Zeichenfolge zurückgegeben
""
, weder ein Fehler noch eine Fehlermeldung.Hinweis (2): Wenn Ihnen mein Code gefällt, fügen Sie ihn unbedingt Ihrer js-Bibliothek und / oder Ihren Repos hinzu, da ich hart daran gearbeitet habe, ihn zu perfektionieren, und es wäre eine Schande, ihn zu verschwenden. Also, ohne weiteres, hier ist es:
Genießen! Du bist immer willkommen!:
quelle
quelle
Wenn Sie mit Web-URLs zu tun haben, können Sie Folgendes verwenden:
Demo: https://jsfiddle.net/squadjot/q5ard4fj/
quelle
Versuche dies:
quelle
edit: Seltsamerweise (oder vielleicht auch nicht)
$1
scheint das im zweiten Argument der Ersetzungsmethode nicht zu funktionieren ... Entschuldigung.quelle
Ich habe gerade festgestellt, dass es nicht ausreicht, die Antwort von p4bl0 zu kommentieren, obwohl Toms Antwort das Problem eindeutig löst:
quelle
Für die meisten Anwendungen ein einfaches Skript wie
würde gut funktionieren (wie von Tom zur Verfügung gestellt). Dies ist jedoch kein Kinderspiel. Es funktioniert nicht, wenn der folgende Dateiname angegeben wird:
Es mag ein bisschen übertrieben sein, aber ich würde vorschlagen, einen URL-Parser wie diesen zu verwenden , um Fehler aufgrund unvorhersehbarer Dateinamen zu vermeiden.
Mit dieser speziellen Funktion können Sie den Dateinamen wie folgt erhalten:
Dies gibt "image.jpg" ohne die URL-Variablen aus. Dann können Sie die Dateierweiterung abrufen.
quelle
quelle
//Verwendungszweck
Erweiterung ('file.jpeg')
Gibt immer die untere untere Erweiterung der Erweiterung zurück, damit Sie überprüfen können, ob der Feldwechsel funktioniert für:
file.JpEg
Datei (keine Erweiterung)
Datei. (keine Verlängerung)
quelle
Wenn Sie nach einer bestimmten Erweiterung suchen und deren Länge kennen, können Sie substr verwenden :
JavaScript-Referenz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
quelle
Ich bin viele Monde zu spät zur Party, aber der Einfachheit halber benutze ich so etwas
quelle
Hierfür gibt es im
path
Modul eine Standardbibliotheksfunktion :Ausgabe:
Also, wenn Sie nur das Format wollen:
Wenn es keine Erweiterung gibt, gibt die Funktion eine leere Zeichenfolge zurück:
Wenn Sie Node verwenden,
path
ist dies integriert. Wenn Sie auf den Browser abzielen, bündelt Webpack einepath
Implementierung für Sie. Wenn Sie den Browser ohne Webpack anvisieren, können Sie path-browserify manuell einschließen .Es gibt keinen Grund, String-Splitting oder Regex durchzuführen.
quelle
„one-liner“ zu bekommen Dateinamen und Erweiterung verwenden
reduce
und Array Destrukturierung :mit besserer Einrückung:
quelle
Eine einzeilige Lösung, die auch Abfrageparameter und alle Zeichen in der URL berücksichtigt.
quelle
page.html#fragment
), werden die Dateierweiterung und das Fragment zurückgegeben.Diese einfache Lösung
Tests
quelle
Wallacers Antwort ist nett, aber eine weitere Überprüfung ist erforderlich.
Wenn die Datei keine Erweiterung hat, wird der Dateiname als Erweiterung verwendet, was nicht gut ist.
Probier diese:
quelle
Vergessen Sie nicht, dass einige Dateien keine Erweiterung haben können.
quelle
quelle
quelle