Pregunta js función para obtener el nombre de archivo de url


Tengo una url como http://www.example.com/blah/th.html

Necesito una función de JavaScript para darme el valor 'th' de eso.

Todas mis URL tienen el mismo formato (nombres de archivo de 2 letras, con extensión .html).

Quiero que sea una función segura, por lo que si alguien ingresa una url vacía, no se rompe.

Sé cómo verificar la longitud, pero debería estar buscando null a la derecha?


31
2018-02-04 15:11


origen


Respuestas:


Use la función de coincidencia.

function GetFilename(url)
{
   if (url)
   {
      var m = url.toString().match(/.*\/(.+?)\./);
      if (m && m.length > 1)
      {
         return m[1];
      }
   }
   return "";
}

20
2018-02-04 15:24



var filename = url.split('/').pop()

98
2018-06-17 08:50



¿Por qué tan difícil?

var filename = url.split('/').pop().split('#')[0].split('?')[0];


44
2018-04-20 22:56



Similar a los otros, pero ... He usado el guión simple de Tom, una sola línea,
entonces puedes usar el nombre de archivo var en cualquier lugar:
http://www.tomhoppe.com/index.php/2008/02/grab-filename-from-window-location/

var filename = location.pathname.substr(location.pathname.lastIndexOf("/")+1);

9
2018-03-19 20:09



Yo usaría el substring función combinada con lastIndexOf. Esto permitirá nombres de archivos con períodos en ellos, p. dado http://example.com/file.name.txt esto da file.name a diferencia de la respuesta aceptada que daría file.

function GetFilename(url)
{
    if (url)
    {
        return url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));
    }
    return "";
}

3
2018-01-06 13:05



Una solución de expresiones regulares que representa la consulta de URL y el identificador de hash:

function fileNameFromUrl(url) {
   var matches = url.match(/\/([^\/?#]+)[^\/]*$/);
   if (matches.length > 1) {
     return matches[1];
   }
   return null;
}

JSFiddle aquí.


3
2018-04-03 03:53



Usando jQuery con el Plugin URL:

var file = jQuery.url.attr("file");
var fileNoExt = file.replace(/\.(html|htm)$/, "");
// file == "th.html", fileNoExt = "th"

2
2018-02-04 19:17



ésos no funcionarán para la url larga como
"/my/folder/questions.html#dssddsdsd?toto=33&dududu=podpodpo"

aquí espero obtener "questions.html". Entonces una solución posible (lenta) es la siguiente

fname=function(url) 
{ return url?url.split('/').pop().split('#').shift().split('?').shift():null }

entonces puedes probar que en cualquier caso solo obtienes el nombre del archivo.

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)

(Me encantaría ver una solución más rápida o más inteligente)


2
2018-01-06 14:13



<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>

1
2018-02-04 15:24



Prueba esto

url.substring(url.lastIndexOf('/')+1, url.length)

1
2018-01-18 09:52