Получить имя файла из URL, используя регулярные выражения или Javascript - PullRequest
6 голосов
/ 29 декабря 2010

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

Вот критерии:

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

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

И вернуть filename.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, так какхорошо.

Спасибо заранее.

Ответы [ 4 ]

20 голосов
/ 29 декабря 2010

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

var a= document.createElement('a');
a.href= 'http://somedomain.com/dirname/filename.php?query';
var filename= a.pathname.split('/').pop(); // filename.php
3 голосов
/ 29 декабря 2010

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

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

0 голосов
/ 03 мая 2019
function returnPHPname(x) {
    var fileName = x.split(/[#\?]/).shift().split('/').pop()
    return fileName.slice(-3) == 'php'? fileName: ""
}

split(/[#\?]/) split ввод на «#» или «?»с помощью регулярного выражения класс символов .
shift() смещение из крайнего левого элемента из разделенного ввода.
split('/') split этот элементна каждый слеш и возвращать массив.
pop() pop «самый верхний» элемент массива в качестве имени файла.
slice(-3) slice от трех последних символов изимя файла для проверки ..
'php'? fileName: "" 'php' возвращает имя файла, иначе пустая строка.

Обратите внимание, что '\?' в regex экранируется как символ вместо оператора regex.

0 голосов
/ 29 декабря 2010

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

[\w_.-]*?(?=[\/\?\#])|[\w_.-]*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...