странная регулярка и видимо не проверенная временем
Сообщение от qwerty-клавиатура
|
([a-zA-Z]+:)
|
протокол может содержать цифры, а тут только буквы
Сообщение от qwerty-клавиатура
|
(?:([a-zA-Z]+:)\/\/)?
|
ссылка может начинаться с двух слешей без протокола, а тут это не предусмотрено
Сообщение от qwerty-клавиатура
|
(?:([-+._a-zA-Z0-9]+)
|
имя пользователя часто имеет и другие символы
Сообщение от qwerty-клавиатура
|
(?::([-+._a-zA-Z0-9]+))?@)?
|
пароль, вообще может содержать все что угодно
про остальное вообще сложно сказать что намудрено.
Сообщение от qwerty-клавиатура
|
return false;
|
что за возврат ложного значения? любая строка в первую очередь если она не подходит любым критериям, должна расцениваться как путь(pathname).
вот мой вариант написанный как то давно. хотя он и не претендует на идеал, ибо не проходил жестких тестов.
function parseURL(url) {
var m = /(?:([\w0-9]+:))?(?:\/\/(?:(?:([^:]*):)?([^@]*)@)?(([^\/:\?#]+)(?:\:([0-9]+))?))?([^\?#]*)(?:(\?[^#]+)|\?)?(?:(#.*))?/.exec(url);
return {
protocol: m[1]||'',
username: m[2]||'',
password: m[3]||'',
hostname: m[5]||'',
host: m[4]||'',
port: m[6]||'',
pathname: m[7].replace(/^\s+/g,''),
search: (m[8]||'').replace(/^\s+|\s+$/g,''),
hash: m[9]||''
}
}