En javascript/jquery, dada una ruta a una carpeta como:
"http://www.blah/foo/bar/"
o
"http://www.blah/foo/bar" (this one doesn't have a slash in the end)
¿Cómo se puede extraer el nombre de la última carpeta? En este caso sería "bar"
.
¿Hay una manera fácil a través de una función incorporada?
Gracias.
Denys Séguret
Usa el poder de la expresión regular:
var name = path.match(/([^\/]*)\/*$/)[1]
Tenga en cuenta que esta no es la última “carpeta” (que no está definida en su caso y en el caso general de una URL), sino el último token de ruta.
-
esto regresará
bar/
si el camino tiene/
al final– Adil Shaikh
22 de mayo de 2013 a las 15:13
-
@pXL arreglado (copiar y pegar mal)
– Denys Séguret
22 de mayo de 2013 a las 15:14
-
Nota: (El título dice: “Cómo obtener el nombre de la última carpeta”) Lo anterior devolverá
about.html
por ejemplo:/foo/bar/about.html
– Roko C. Bulján
16/09/2014 a las 14:33
-
@RokoC.Buljan Cierto. Pero creo que esto fue lo que pidió OP.
– Denys Séguret
16/09/2014 a las 14:36
-
@dystroy sí dame5! No fue una crítica, solo una NÓTESE BIEN 🙂
– Roko C. Bulján
16/09/2014 a las 14:37
david fregoli
¡Usa expresiones regulares! o:
var arr="http://www.blah/foo/bar/".split("https://stackoverflow.com/");
var last = arr[arr.length-1] || arr[arr.length-2];
esto da cuenta de ‘http://www.blah/foo/bar////‘ :p (o bloquea el navegador)
var arr="http://www.blah/foo/bar/////".split("https://stackoverflow.com/");
var last = (function trololol(i) {
return arr[i] || trololol(i-1);
})(arr.length-1);
-
funcion recursiva entonces :p
– David Fregoli
22 de mayo de 2013 a las 15:12
-
@Matt Esto realmente no parece un camino. ¿Cuál debería ser el resultado?
– Denys Séguret
22 de mayo de 2013 a las 15:14
-
@dystroy eso poder ser una ruta (válida y funcional) en el lado del servidor y generar direcciones dinámicamente…
– usuario1823761
22 de mayo de 2013 a las 15:16
-
@dystroy: fue principalmente un comentario alegre, pero supongo que una cadena vacía o la “barra”, cualquiera que sea el caso de uso de los OP. El formato aún funciona en la mayoría (¿todos?) de los servidores web. No estoy seguro si es parte de una especificación en alguna parte.
– Mate
22 mayo 2013 a las 15:20
-
Parece que le gustaría conocer las expresiones regulares. Una buena manera de aprender es mirar [regex] preguntas sobre SO e intenta encontrar la respuesta sin mirar las otras (al menos hasta que hayas intentado lo suficiente). En el proceso, será mejor que eches un vistazo a este sitio.
– Denys Séguret
22 de mayo de 2013 a las 16:02
Mira esto:
var lastFolder = location.href.split("https://stackoverflow.com/").filter(function(el) {
return el.trim().length > 0;
}).pop();
alert( location.href.split("https://stackoverflow.com/").filter(function(el) { return el.trim().length > 0; }).pop() );
alert( location.href );
var test = "http://www.blah/foo/bar/" ;
alert( test.split("https://stackoverflow.com/").filter(function(el) { return el.trim().length > 0; }).pop() );
var myString = "http://www.blah/foo/bar";
var pathElements = myString.replace(/\/$/, '').split("https://stackoverflow.com/");
var lastFolder = pathElements[pathElements.length - 1];
Esto es JavaScript puro y no necesita jQuery.
Usualmente uso la combinación de split
y pop
en javascript, porque generalmente obtengo la dirección de la carpeta de aws s3, ya está limpia:
const teststring = 'image_1/ArtService/GB/ART-123/dependants/ASM-123';
const folder = teststring.split("https://stackoverflow.com/").pop();
console.log('folder:', folder);// ASM-123
Puede dividir la cadena en una lista y tomar el último elemento de la lista a través de una función.
function checkString(stringToCheck) {
var list1 = stringToCheck.split("https://stackoverflow.com/");
if (list1[list1.length - 1].length < 1) {
var item = list1[list1.length - 2]
} else {
var item = list1[list1.length - 1];
}
$('#results').append('Last Folder in '+stringToCheck+': <b>'+item+'</b><br>');
}
Desde allí puede encontrar el último elemento real.
Si bien puede que no sea la respuesta más elegante, parece ser la más fácil de entender para alguien que no conozca las expresiones regulares.
JSFiddle actualizado para mostrar los resultados.
var str = "...";
var segments = str.split("https://stackoverflow.com/");
var lastDir = (segments.length > 1) ? segments[segments.length - 2] : "";
El primer ejemplo produce “barra”. El segundo ejemplo produce “foo”.
Si desea ignorar la barra inclinada final y considerar el último segmento como una carpeta también, entonces un ligero ajuste a RegExp de @bdesham es el truco:
var segments = str.replace(/\/+$/, '').split("https://stackoverflow.com/");
var lastDir = (segments.length > 0) ? segments[segments.length - 1] : "";
-
Formateé tu respuesta por ti. Mire los botones en la barra de herramientas al editar.
– Denys Séguret
22 mayo 2013 a las 15:20
-
@dystroy Gracias, supongo que arruiné el descuento de GitHub.
– LexLythius
22 de mayo de 2013 a las 15:28
-
Creo que lo que quiere hacer no es correcto, ya que la barra diagonal final significa que el último segmento es un directorio (la única forma sintáctica real de decir carpetas y archivos de appart) y eso puede causarle problemas si hace algo RESTful con este. Aunque editaré mi respuesta
– LexLythius
22 mayo 2013 a las 22:46