J'ai une url comme http://www.example.com/blah/th.html
J'ai besoin d'une fonction javascript pour me donner la valeur 'th' qui en découle.
Toutes mes URL ont le même format (noms de fichiers de 2 lettres, avec extension .html).
Je veux que ce soit une fonction sûre, donc si quelqu'un passe dans une URL vide, il ne casse pas.
Je sais comment vérifier la longueur, mais je devrais vérifier la valeur null à droite?
Utilisez la fonction de correspondance.
function GetFilename(url)
{
if (url)
{
var m = url.toString().match(/.*\/(.+?)\./);
if (m && m.length > 1)
{
return m[1];
}
}
return "";
}
var filename = url.split('/').pop()
Semblable aux autres, mais ... j'ai utilisé le script simple de Tom - une seule ligne,
alors vous pouvez utiliser le nom de fichier var n'importe où:
http://www.tomhoppe.com/index.php/2008/02/grab-filename-from-window-location/
var filename = location.pathname.substr(location.pathname.lastIndexOf("/")+1);
Une solution regex qui prend en compte la requête URL et l'identifiant de hachage
function fileNameFromUrl(url) {
var matches = url.match(/\/([^\/?#]+)[^\/]*$/);
if (matches.length > 1) {
return matches[1];
}
return null;
}
JSFiddle ici .
J'utiliserais la fonction substring
associée à lastIndexOf
. Cela permettra de créer des noms de fichiers contenant des points, par exemple. étant donné http://example.com/file.name.txt
ceci donne file.name
contrairement à la réponse acceptée qui donnerait file
.
function GetFilename(url)
{
if (url)
{
return url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));
}
return "";
}
Utilisation de jQuery avec le plugin URL :
var file = jQuery.url.attr("file");
var fileNoExt = file.replace(/\.(html|htm)$/, "");
// file == "th.html", fileNoExt = "th"
Cela devrait fonctionner pour tous les cas
function getFilenameFromUrl(url: string): string {
const pathname = new URL(url).pathname;
const index = pathname.lastIndexOf('/');
return (-1 !== index ? pathname.substring(index + 1) : pathname);
}
ceux qui ne fonctionneront pas pour les longues url comme
"/my/folder/questions.html#dssddsdsd?toto=33&dududu=podpodpo"
ici je m'attends à obtenir "questions.html" . Une solution possible (lente) est donc la suivante
fname=function(url)
{ return url?url.split('/').pop().split('#').shift().split('?').shift():null }
alors vous pouvez tester que dans tous les cas, vous n'obtenez que le nom de fichier.
fname("/my/folder/questions.html#dssddsdsd?toto=33&dududu=podpodpo")
-->"questions.html"
fname("/my/folder/questions.html#dssddsdsd")
-->"questions.html"
fname("/my/folder/questions.html?toto=33&dududu=podpodpo")
"-->questions.html"
(and it works for null)
(J'aimerais beaucoup voir une solution plus rapide ou plus intelligente)
<script type="text/javascript">
function getFileName(url){
var path = window.location.pathName;
var file = path.replace(/^.*\/(\w{2})\.html$/i, "$1");
return file ? file : "undefined";
}
</script>
Cette réponse ne fonctionne que dans l'environnement du navigateur. Ne convient pas pour noeud.
function getFilename(url) {
const filename = decodeURIComponent(new URL(url).pathname.split('/').pop());
if (!filename) return 'index.html'; // some default filename
return filename;
}
function filenameWithoutExtension(filename) {
return filename.replace(/^(.+?)(?:\.[^.]*)?$/, '$1');
}
Pour les navigateurs ne supportant pas new URL
, vous voudrez peut-être:
var a = document.createElement('a');
a.href = url;
var pathname = a.pathname;
Voici deux fonctions:
Pour analyser l'URL, un nouvel objet URL
devrait être le meilleur choix. Notez également que l'URL ne contient pas toujours un nom de fichier.
Avis: Cette fonction essaie de résoudre le nom de fichier à partir d'une URL. Mais cela ne garantit PAS que le nom du fichier est valide et utilisable:
:
dans Windows, \0
dans la plupart des systèmes d'exploitation, ...);De la même manière que @ user2492653 a suggéré, si tout ce que vous voulez est le nom du fichier tel que Firefox vous l’indique, alors vous utilisez la méthode split (), qui sépare la chaîne en un tableau de composants. indice.
var temp = url.split("//");
if(temp.length > 1)
return temp[temp.length-1] //length-1 since array indexes start at 0
Cela diviserait fondamentalement C: /fakepath/test.csv en {"C:", "fakepath", "test.csv"}
Essaye ça
url.substring(url.lastIndexOf('/')+1, url.length)
mes 2 cents
la méthode LastIndexOf ("/") en elle-même tombe si les chaînes de requête contiennent "/"
Nous savons tous qu'ils "devraient" être codés en tant que %2F
, mais cela ne prend qu'une seule valeur non échappée pour causer des problèmes.
Cette version gère correctement les/dans les chaînes de requête et ne s'appuie pas sur. Dans l'URL
function getPageName() {
//#### Grab the url
var FullUrl = window.location.href;
//#### Remove QueryStrings
var UrlSegments = FullUrl.split("?")
FullUrl = UrlSegments[0];
//#### Extract the filename
return FullUrl.substr(FullUrl.lastIndexOf("/") + 1);
}
function getFileName(url) {
// Remove the QueryString
url = url.replace(/\?.*$/, '');
// Extract the last part
return url.split('/').pop();
}