Как минимум три способа:
Регулярное выражение:
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 и производительности, так как двигатели меняются так радикально друг от друга), но если вы делаете это тысячи раз в цикле, это Безразлично Это не имеет значения, и я буду стремиться к ясности кода.