Как извлечь имя файла URL-адреса текущего пути документа в JavaScript?
Я пытаюсь извлечь текущее имя файла в Javascript без каких-либо параметров.
$(location).attr('href').match(/([a-zA-Z\-\_0-9]+\.\w+)$/);
var current_path = RegExp.$1;
if ((current_path == 'index.html') || ...) {
// something here
}
Но он вообще не работает при доступе, например http://example.com/index.html?lang=ja. Конечно, прежде чем имя файла будет изменено произвольно.
Любая идея?
Ответы
Ответ 1
Если вы ищете последний элемент в пути, попробуйте следующее:
var current_path = window.location.pathname.split('/').pop();
Это:
window.location.pathname
даст вам что-то вроде:
"/questions/6543242/how-to-extract-the-filename-of-url-in-javascript"
Затем .split()
разделит строку на Array, а .pop()
предоставит вам последний элемент массива.
Ответ 2
Имя файла URL-адреса - это все, что следует за последним "/"
до одного из следующих: 1.) a "?"
(начало URL-запроса) или 2.) a "#"
(начало фрагмента URL-адреса), или 3.) конец строки (если нет запроса или фрагмента).
Это проверенное регулярное выражение делает трюк:
.match(/[^\/?#]+(?=$|[?#])/);
Ответ 3
function filename(path){
path = path.substring(path.lastIndexOf("/")+ 1);
return (path.match(/[^.]+(\.[^?#]+)?/) || [])[0];
}
console.log(filename('http://example.com/index.html?lang=ja'));
// returned value: 'index.html'
Ответ 4
Существует библиотека URL.js, которая упрощает работу с URL-адресами. Я рекомендую!
Пример
var uri = new URI('http://example.org/foo/hello.html?foo=bar');
uri.filename(); // => 'hello.html'
Ответ 5
ваше регулярное выражение неверно. Вместо этого попробуйте уточнить:
.match(/([a-zA-Z\-\_0-9]+\.[a-zA-Z]{2,4})[\?\$]/);
говорит:
найдите любое количество буквенно-цифровых или hypens [a-zA-Z\-\_0-9]+
перед полным перерывом, которое содержит от 2 до 4 буквенных символов [a-zA-Z]{2,4}
, которые сочетаются с концом (\$
) или вопросительным знаком (\?
)
проверено на:
("http://www.example.com/index.html?lang=ja").match(/([a-zA-Z\-\_0-9]+\.[a-zA-Z]{2,4})[\?\$]/);
var current_path = RegExp.$1;
alert(current_path);
Ответ 6
попробуйте следующее:
window.location.pathname.substring(1)
Ответ 7
Вы можете сделать что-то более простое:
var url = "http://google.com/img.png?arg=value#div5"
var filename = url.split('/').pop().split('#')[0].split('?')[0];
Результат:
filename => "img.png"