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