По крайней мере, тремя способами:
Регулярное выражение:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
..., которое говорит "захватить серию символов, не содержащих косую черту" ([^/]*
) наконец строки ($
).Затем он получает сопоставленные символы из возвращенного объекта сопоставления путем индексации в нем ([0]
);в объекте совпадения первая запись - это вся совпадающая строка.Нет необходимости для групп захвата.
Пример в реальном времени
Использование lastIndexOf
и substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
делает то, что звучит так: он находит индекс последнего вхождения символа (ну, строки) в строке, возвращая -1, если не найден.В девяти случаях из десяти вы, вероятно, захотите проверить это возвращаемое значение (if (n !== -1)
), но в приведенном выше примере, поскольку мы добавляем к нему 1 и вызываем подстроку, мы в конечном итоге делаем str.substring(0)
, которая просто возвращает строку.
Использование Array#split
У Судхира и Тома Уолтерса это покрыто здесь и здесь , но только для полноты:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
разбивает строку, используя заданный разделитель, возвращая массив.
Решение lastIndexOf
/ substring
является , вероятно, наиболее эффективным (хотя оно всегда имеетбудьте осторожны, говоря что-нибудь о JavaScript и производительности, поскольку движки так радикально отличаются друг от друга), но если вы не делаете это тысячи раз в цикле, это не имеет значения, и я буду стремиться к ясности кода.