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 lastIndexOf
y substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
hace 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
/ substring
es 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.