Pelo menos três maneiras:
Uma expressão regular:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... que diz "pegue a série de caracteres que não contém uma barra" ( [^/]*
) no final da string ( $
). Em seguida, ele captura os caracteres correspondentes do objeto de correspondência retornado, indexando nele ( [0]
); em um objeto de correspondência, a primeira entrada é toda a string correspondida. Não há necessidade de grupos de captura.
Exemplo vivo
Usando lastIndexOf
e substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
faz o que parece que faz: encontra o índice da última ocorrência de um caractere (bem, string) em uma string, retornando -1 se não for encontrado. Nove em cada dez vezes, você provavelmente deseja verificar o valor de retorno ( if (n !== -1)
), mas acima, uma vez que estamos adicionando 1 a ele e chamando a substring, acabaríamos fazendo o str.substring(0)
que apenas retorna a string.
Usando Array#split
Sudhir e Tom Walters cobrem isso aqui e aqui , mas apenas para completar:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
divide uma string usando o delimitador fornecido, retornando uma matriz.
A solução lastIndexOf
/ substring
é provavelmente a mais eficiente (embora seja sempre necessário ter cuidado ao dizer qualquer coisa sobre JavaScript e desempenho, uma vez que os motores variam tão radicalmente um do outro), mas a menos que você esteja fazendo isso milhares de vezes em um loop, não não importa e eu lutaria pela clareza do código.