Получить имя файла из URL с помощью регулярных выражений или Javascript

мне нужно получить имя файла из URL-адреса.

вот критерии:

ему нужно вернуть пустую строку "" в следующих случаях:

http://somedomain.com
http://www.somedomain.com
http://somedomain.com/
http://www.somedomain.com/

и вернуть имя файла.php в следующих сценариях:

http://somedomain.com/filename.php?query
http://www.somedomain.com/filename.php?query
http://somedomain.com/filename.php#query
http://www.somedomain.com/filename.php#query

Я нашел регулярное выражение

[w_.-]*?(?=[?#])|[w_.-]*$ С здесь

однако он возвращает somedomain.com на входе http://somedomain.com. Я не могу понять, как изменить его, чтобы игнорировать домен, когда нет / в конце его.

если это трудно сделать с регулярными выражениями, я также буду признателен за решение JavaScript.

Thanx заранее.

3 ответов


предполагая, что вы пишете сценарий в браузере, уже есть полнофункциональный синтаксический анализатор URL для вас, чтобы воспользоваться, без необходимости писать ненадежные неполные regexen. Используйте HTMLAnchorElement для чтения locationсвойства host, pathname, search, hash etc.:

var a= document.createElement('a');
a.href= 'http://somedomain.com/dirname/filename.php?query';
var filename= a.pathname.split('/').pop(); // filename.php

это поместит имя файла в : [^:]+://[^/]+/?([^?#]*)

(стр. С. http://rentzsch.github.com/JSRegexTeststand/ - ваш друг для такого рода испытаний)


используйте эту измененную версию Reg ex: (добавлен \ / к существующему)

[\w_.-]*?(?=[\/\?\#])|[\w_.-]*$