Подтвердить что ты не робот

Как извлечь имя файла 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. Конечно, прежде чем имя файла будет изменено произвольно.

Любая идея?

4b9b3361

Ответ 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"