Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ( function() {
- var s = '^!"#$%&\'()*+,./:;<=>?@\\[\\\\\\]^_`{|}~',
- s1 = '[' + s + '-]+(?:[' + s + ']+[' + s + '-])*',
- re = new RegExp( '^' + [
- // протокол
- '(?:([^:@/?#]*:)\\/\\/)?',
- // пользователь и пароль
- '(?:([^:@/?#]*)(?::([^:@/?#]*))?@)?',
- // хост и порт
- '((' + s1 + '(?:\\.' + s1 + ')*)(?::(\\d+))?)?',
- // путь
- '(/[^?#]*)?',
- // часть после вопроса
- '(\\?[^#]*)?',
- // хеш
- '(#.*)?'
- ].join('') + '$' );
- // console.log(re);
- parseURL = function(s) {
- // проверяем на наличие символов с ascii кодами меньше 33, а так же на правильность кодирования
- if ( /^(?:[^\x00-\x20%]|%[a-zA-Z0-9]{2})*$/.test(s) ) {
- var parts = re.exec(s);
- if (parts !== null) {
- var scheme = ['protocol', 'user', 'password', 'hostname', 'host', 'port', 'pathname', 'search', 'hash'],
- i = 0,
- l = scheme.length,
- o = {};
- while (i < l) {
- o[scheme[i]] = parts[++i] === undefined ? '' : parts[i];
- }
- if (o.pathname) {
- o.pathname = o.pathname.replace(/\\/g, '/').replace(/\/{2,}/g, '/');
- }
- return o;
- }
- }
- return false;
- };
- } )();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement