Удалить все до последнего появления символа
Я пытаюсь выполнить следующее действие над строкой:
- найти последнее вхождение символа
"/"
;
- удалить все перед этим символом;
- вернуть остатки строки;
Чтобы быть более явным, скажем, у меня есть следующая строка:
var string = "/Roland/index.php"; // Which is a result of window.location.pathname
Теперь мне нужно извлечь из него все, кроме фактической страницы, что-то вроде этого:
var result = "index.php" // Which is what I need to be returned
Конечно, это просто пример, потому что, очевидно, у меня будут разные страницы, но применяются те же принципы.
Мне было интересно, может ли кто-нибудь помочь мне с решением для этого. Я пробовал следующие действия, но без успеха:
var location = window.location.pathname;
var result = location.substring(location.lastIndexOf["/"]);
Ответы
Ответ 1
У вас есть правильная идея, просто замените скобки скобками.
var string = "/Roland/index.php";
var result = string.substring(string.lastIndexOf("/") + 1);
Вот пример в jsfiddle, и здесь объясняется метод .lastIndexOf() на Mozilla Developer Network.
Ответ 2
Лично я бы использовал регулярное выражение:
var result = string.replace(/^.*\/(.*)$/, "$1");
Если вы знакомы с регулярными выражениями (и вы должны быть, если нет:-), то это не так чуждо, как если бы они были незнакомы.
Ведущий ^
заставляет это регулярное выражение "привязывать" соответствие в начале строки. \/
соответствует одному символу /
(\
означает, что /
не путает парсер регулярных выражений). Затем (.*)$
сопоставляет все остальное от /
до конца строки. Начальный .*
будет поглощать столько, сколько может, включая символы /
до последнего. Текст замены "$1"
- это специальная форма, которая означает "содержимое первой согласованной группы". Это регулярное выражение имеет группу, образованную круглыми скобками вокруг последнего .*
(в (.*)$
). Это будет весь материал после последнего /
, поэтому общий результат состоит в том, что вся строка заменяется именно этим материалом. (Если шаблон не соответствует, потому что нет символов /
, ничего не произойдет.)
Ответ 3
Разделите строку в массив на /
и .pop()
с последнего элемента. Обратите внимание, что сначала вам нужно отключить конечную косую черту, если она есть.
var locationstring = window.location.pathname;
// replace() the trailing / with nothing, split on the remaining /, and pop off the last one
console.log(locationstring.replace(/\/$/, "").split('/').pop());
Если в случае URL-адреса, такого как /path/stuff/here/
, где у вас есть trailing /
, если этот случай должен возвращать пустую строку, а не here
, измените приведенное выше, чтобы удалить .replace()
из цепочки вызовов, Я предположил, что вам нужен последний компонент, независимо от конечной косой черты, но, возможно, неправильно принял.
console.log(locationstring.split('/').pop());
Ответ 4
var result = /\/([^\/]*)$/.exec(location)[1];
//"remove-everything-before-the-last-occurrence-of-a-character#10767835"
Примечание: location
здесь window.location
, а не ваш var location
.
Ответ 5
var string = "/Roland/index.php";
var result = string.substring(0, string.lastIndexOf("/") + 0);