Obtener el valor de una cadena después de una barra en JavaScript

112

Ya lo estoy intentando durante más de una hora y no puedo encontrar la manera correcta de hacerlo, aunque probablemente sea bastante fácil:

Tengo algo como esto: foo/bar/test.html

Me gustaría usar jQuery para extraer todo después del último /. En el ejemplo anterior, la salida sería test.html.

Supongo que se puede hacer usando substry indexOf(), pero no puedo encontrar una solución que funcione.

r0skar
fuente

Respuestas:

243

Al menos de tres formas:

Una expresión regular:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

... que dice "tome la serie de caracteres que no contengan una barra" ( [^/]*) al final de la cadena ( $). Luego, toma los caracteres coincidentes del objeto de coincidencia devuelto indexando en él ( [0]); en un objeto de coincidencia, la primera entrada es toda la cadena coincidente. No es necesario capturar grupos.

Ejemplo vivo

Usando lastIndexOfy substring:

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOfhace lo que parece: encuentra el índice de la última aparición de un carácter (bueno, cadena) en una cadena, devolviendo -1 si no se encuentra. Nueve de cada diez veces probablemente desee verificar ese valor de retorno ( if (n !== -1)), pero en lo anterior, dado que le estamos agregando 1 y llamamos a la subcadena, terminaríamos haciendo lo str.substring(0)que solo devuelve la cadena.

Utilizando Array#split

Sudhir y Tom Walters tienen esto cubierto aquí y aquí , pero solo para completar:

var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();

split divide una cadena usando el delimitador dado, devolviendo una matriz.

La solución lastIndexOf/ substringes probablemente la más eficiente (aunque siempre hay que tener cuidado al decir algo sobre JavaScript y el rendimiento, ya que los motores varían radicalmente entre sí), pero a menos que esté haciendo esto miles de veces en un bucle, no es así. No importa y me esforzaría por la claridad del código.

TJ Crowder
fuente
1
¿Cómo adaptaría esto para devolver la cadena antes de la barra diagonal final? (Es decir, devuelve el nombre de la carpeta principal)
wbadart
28

No necesita jQuery, y hay muchas formas de hacerlo, por ejemplo:

var parts = myString.split('/');
var answer = parts[parts.length - 1];

Donde myString contiene su cadena.

Tom Walters
fuente
3
+1 (para trabajar) señalando que jQuery no es la solución definitiva para los problemas de JavaScript.
Andrew Jackman
1
Esta es una solución con errores, intente qué sucede si agrega la barra a la barra. Devuelve 0. ¿Y qué pasa si no hay slug? - devuelve NaN! wtf? código incorrecto
Donatas Cereska
1) La pregunta estaba relacionada con una entrada que no era nula 2) La entrada estaba relacionada con entradas que terminaban en nombres de archivo (sin barras) 3) La respuesta aceptada es de hecho una solución mucho mejor, de ahí los numerosos votos a favor 4) Puede agregar su propia solución
Tom Walters
12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
Kasdega
fuente
9

Tratar;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
alerta (tmp.pop ());
Sudhir Bastakoti
fuente
5

Cuando sé que la cadena va a ser razonablemente corta, utilizo la siguiente línea ... (recuerde escapar de las barras diagonales inversas)

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

alerta aparece con picture name.jpg

DaveAlger
fuente
2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

Ahora tiene el last.htm en la cadena de ruta.

Zar E Ahmer
fuente
1

peso ligero

string.substring(start,end)

dónde

start = Required. La posición donde comenzar la extracción. El primer carácter está en el índice 0`.

end = Optional. La posición (hasta, pero sin incluir) donde finalizar la extracción. Si se omite, extrae el resto de la cadena.

    var string = "var1/var2/var3";

    start   = string.lastIndexOf('/');  //console.log(start); o/p:- 9
    end     = string.length;            //console.log(end);   o/p:- 14

    var string_before_last_slash = string.substring(0, start);
    console.log(string_before_last_slash);//o/p:- var1/var2

    var string_after_last_slash = string.substring(start+1, end);
    console.log(string_after_last_slash);//o/p:- var3

O

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3
Shailesh Sonare
fuente
1

Jquery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);

Javascript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

Reemplazar '_' || '/' a su propia necesidad

SMPLYJR
fuente
1

Como se requiere en la pregunta:

var string1= "foo/bar/test.html";
  if(string1.contains("/"))
  {
      var string_parts = string1.split("/");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }  

y para la pregunta formulada en la URL (solicitada por una aparición de '=') ::
[ http://stackoverflow.com/questions/24156535/how-to-split-a-string-after-a-particular-character-in -jquery] [1]

var string1= "Hello how are =you";
  if(string1.contains("="))
  {
      var string_parts = string1.split("=");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }
Vishal Kumar
fuente
0

Prueba esto:

const url = "files/images/gallery/image.jpg";

console.log(url.split("/").pop());

Patrycja Petryk
fuente
Esta solución ya está en la respuesta aceptada, como la tercera solución posible
β.εηοιτ.βε