Par exemple, en supposant que x = filename.jpg
je veux obtenir filename
, où filename
pourrait être n'importe quel nom de fichier (supposons que le nom de fichier ne contienne que [a-zA-Z0-9-_] pour simplifier.).
J'ai vu x.substring(0, x.indexOf('.jpg'))
sur DZone Snippets , mais je n'aurais pas x.substring(0, x.length-4)
mieux performé ? Parce que, length
est une propriété et ne vérifie pas les caractères alors que indexOf()
c'est une fonction et vérifie les caractères.
Réponses:
Si vous connaissez la longueur de l'extension, vous pouvez utiliser
x.slice(0, -4)
(où 4 représente les trois caractères de l'extension et le point).Si vous ne connaissez pas la longueur des expressions régulières @John Hartsock serait la bonne approche.
Si vous préférez ne pas utiliser d'expressions régulières, vous pouvez essayer ceci (moins performant):
Notez qu'il échouera sur les fichiers sans extension.
la source
.jpg
. Je cherchais quelque chose comme Rubyx[0..-5]
, et ax.slice(0, -4)
fière allure! Merci! Et merci à tous les autres pour toutes les autres alternatives robustes fournies!"picture.jpeg".slice(0, -4)
-> "image".Je ne sais pas ce qui fonctionnerait plus rapidement, mais ce serait plus fiable en ce qui concerne l'extension comme
.jpeg
ou.html
la source
Dans node.js , le nom du fichier sans l'extension peut être obtenu comme suit.
Plus d'explications sur la page de documentation de Node.js.
la source
var parsed = path.parse(filename)
suivi depath.join(parsed.dir, parsed.name)
.let base = path.basename( file_path, path.extname( file_path ) )
.x.length-4
ne prend en compte que les extensions de 3 caractères. Et si vous avezfilename.jpeg
oufilename.pl
?ÉDITER:
Pour répondre ... bien sûr, si vous avez toujours une extension de
.jpg
,x.length-4
cela fonctionnerait très bien.Cependant, si vous ne connaissez pas la longueur de votre extension, l'une des nombreuses solutions est meilleure / plus robuste.
x = x.replace(/\..+$/, '');
OU
x = x.substring(0, x.lastIndexOf('.'));
OU
x = x.replace(/(.*)\.(.*?)$/, "$1");
OU (avec l'hypothèse que le nom de fichier n'a qu'un seul point)
OU (également avec un seul point)
la source
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('.'));
- tu voulais direx = x.substring(0, x.lastIndexOf('.'));
?Vous pouvez peut-être utiliser l'hypothèse que le dernier point sera le délimiteur d'extension.
Si le fichier n'a pas d'extension, il renverra une chaîne vide. Pour résoudre ce problème, utilisez cette fonction
la source
var f = x.substr(0, x.lastIndexOf('.')) || x;
Cela fonctionne car une chaîne vide est fausse, donc elle retourne x.J'aime celui-ci car c'est un liner qui n'est pas trop difficile à lire:
la source
Dans les versions de Node.js antérieures à 0.12.x:
path.basename(filename, path.extname(filename))
Bien sûr, cela fonctionne également dans 0.12.x et versions ultérieures.
la source
path.parse
réponse est plus simple.Cela fonctionne, même lorsque le délimiteur n'est pas présent dans la chaîne.
Peut également être utilisé comme une doublure comme ceci:
EDIT: Ceci est une solution plus efficace:
la source
Je ne sais pas si c'est une option valide mais j'utilise ceci:
Ce n'est pas seulement une opération que je connais, mais au moins cela devrait toujours fonctionner!
MISE À JOUR: Si vous voulez un oneliner, vous êtes ici:
(name.split('.').slice(0, -1)).join('.')
la source
hello.name.txt
retournehello, name
Un autre doublure:
la source
Voici une autre solution basée sur regex:
Cela ne devrait couper que le dernier segment.
la source
Simple:
la source
La réponse acceptée ne retire que la dernière partie d'extension (
.jpeg
), ce qui peut être un bon choix dans la plupart des cas.Une fois, j'ai dû supprimer toutes les extensions (
.tar.gz
) et les noms de fichiers ont été restreints pour ne pas contenir de points (ce2015-01-01.backup.tar
ne serait donc pas un problème):la source
la source
path/name.ext
->paht/name
au lieu de simplement revenirname
, mais je préfère faire avecfs.parse
bien qu'elle soit un peu plus verbeuse: stackoverflow.com/a/59576950/895245Si vous devez traiter une variable qui contient le chemin complet (ex.
thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
) Et que vous souhaitez retourner uniquement "nom de fichier", vous pouvez utiliser:le résultat sera theName == "filename" ;
Pour l'essayer, écrivez la commande suivante dans la fenêtre de console de votre débogueur Chrome:
window.location.pathname.split("/").slice(-1).join().split(".").shift()
Si vous ne devez traiter que le nom du fichier et son extension (ex.
theNameWithExt = "filename.jpg"
):le résultat sera theName == "filename" , le même que ci-dessus;
Remarques:
Mais je ne peux rien dire sur la comparaison des performances avec les autres réponses ni sur la compatibilité du navigateur ou du système d'exploitation.
extrait de travail 1: le chemin complet
extrait de travail 2: le nom du fichier avec l'extension
extrait de travail 2: le nom du fichier avec double extension
la source
Bien qu'il soit assez tard, j'ajouterai une autre approche pour obtenir le nom de fichier sans extension en utilisant du vieux JS simple
path.replace(path.substr(path.lastIndexOf('.')), '')
la source
path.split('.').pop()
pour des extensions de fichier en une partieNode.js supprime l'extension du répertoire complet de conservation des chemins
https://stackoverflow.com/a/31615711/895245 par exemple a fait
path/hello.html
->hello
, mais si vous voulezpath/hello.html
->path/hello
, vous pouvez utiliser ceci:répertoire de sortie également:
https://stackoverflow.com/a/36099196/895245 y parvient également, mais je trouve cette approche un peu plus sémantiquement agréable.
Testé dans Node.js v10.15.2.
la source
C'est là que les expressions régulières sont utiles! La
.replace()
méthode Javascript prendra une expression régulière, et vous pouvez l'utiliser pour accomplir ce que vous voulez:la source
Un autre liner - nous supposons que notre fichier est une image jpg >> ex: var yourStr = 'test.jpg';
la source
Vous pouvez utiliser
path
pour manœuvrer.Production
la source
la source
C'est le code que j'utilise pour supprimer l'extension d'un nom de fichier, sans utiliser ni regex ni indexOf (indexOf n'est pas pris en charge dans IE8). Il suppose que l'extension est un texte après le dernier '.' personnage.
Cela fonctionne pour:
Voici le code:
la source
hello.tar.gz
, la sortie esthellotar
.J'utiliserais quelque chose comme x.substring (0, x.lastIndexOf ('.')). Si vous optez pour les performances, n'utilisez pas du tout le javascript :-p Non, une autre déclaration n'a vraiment aucune importance pour 99,99999% de tous les usages.
la source