web-dev-qa-db-fra.com

Comment extraire le nom de fichier d'une URL en utilisant javascript / jquery?

Une certaine variable peut contenir un chemin relatif ou un chemin absolu. Quoi qu'il en soit, je dois pouvoir extraire le nom de fichier de la variable:

http://www.somesite.com/dir1/dir2/filename.gif
/dir1/dir2/filename.gif

La structure du répertoire est également arbitraire. Donc, fondamentalement, étant donné l'une des URL ci-dessus (avec une structure de répertoires arbitraire), je dois tirer 'filename.gif'. Merci d'avance

33
jim23
var index = yourstring.lastIndexOf("/") + 1;
var filename = yourstring.substr(index);
55
Gregoire

Manière plus courte

var filename = window.location.href.substr(window.location.href.lastIndexOf("/")+1);
26
Rodrigo
var filename = url.match(/.*\/(.*)$/)[1];
11
CMS
var filename= url.split('/').pop()
8
rash

J'utiliserais une expression régulière.

[^/]*$

Il sélectionne tout après la dernière barre oblique jusqu'à la fin. Vous pouvez l'agrandir pour sélectionner l'extension séparément:

/([^/]*?)(\.[^\./]*)?$
6
Thom Smith
var path = window.location.pathname;
var filename = path.match(/.*\/([^/]+)\.([^?]+)/i)[1];

Utilisez ceci dans le cas où vous ne voulez pas que votre chaîne de requête fasse partie de votre nom de fichier (ce que vous n'avez probablement pas).

5
kflorence
var URL = window.location.pathname; // Gets page name
var page = URL.substring(URL.lastIndexOf('/') + 1);  
alert(page);
3
afro360

J'ai résolu ce problème par ceci:

var URL = window.location.pathname; // Gets page name
var page = URL.substring(URL.lastIndexOf('/') + 1); 
// then display your filename to console
console.info(page)
2
Via Marie Inte
// Extract filename from current page.
var filePath = window.location.pathname;
var fileName = filePath.substr(urlPath.lastIndexOf("/") + 1);
2
Sam Deng

Pour vos exemples, la recherche de sous-chaîne sera probablement votre meilleure option.

Cependant, si vos URI sont en fait suffisamment complexes, vous pouvez essayer parseUri de Steven Levithan:

parseUri(uri).file;

Il a 2 modes et chacun a sa part de bizarreries, alors assurez-vous de consultez la démo .

2
Jonathan Lonowski

Utilisez une expression régulière, quelque chose dans ce sens devrait faire l'affaire:

[^/]+\.[^/]+

Bien que cela ne couvre pas tous les cas possibles, il devrait être plus que approprié pour la plupart des cas. Vous pouvez les utiliser:

var url = window.location.href;
var regex = new RegExp("[^/]+\.[^/]+");
var fileName = regex.exec(url);

J'espère que cela pourra aider

1
LorenVS
    var pathnameArray = window.location.pathname.split("/");
    var nameOfFile = pathnameArray[pathnameArray.length -1];

Il y a probablement des frais généraux que je ne connais pas lorsque j'envisage de créer un tableau plutôt que d'utiliser le substrat que d'autres ont mentionné. Alors peut-être que ce n'est pas une bonne réponse mais plutôt une approche différente pour résoudre le même problème.

1
ross studtman
var filename = /[^\\\/:*?"<>|\r\n]+$/i.exec(window.location.href)[0];
1
user904550

merci sam deng, semble fonctionner mais vous avez une faute de frappe mon ami:

// Extract filename from current page.
var filePath = window.location.pathname;
var fileName = filePath.substr(filePath.lastIndexOf("/") + 1);
1
dwaves.de

Si votre URL est comme ceci:

yourdomain.com/app_dev.php
yourdomain.com/app_dev.php/article/2

et vous souhaitez simplement extraire le nom de fichier (/app_dev.php) afin de pouvoir créer un lien vers votre page d'accueil, utilisez ceci:

var filename = window.location.pathname.substr(0, window.location.pathname.indexOf("/", 1));
window.location = filename;
0
TroodoN-Mike