Фон
Я использую плагин jQuery анализатора URL от Mark Perkins для извлечения значений строки запроса из текущего URL.
Процесс синтаксического анализа завершается неудачно, когда значения строки запроса содержат символ «@», особенно когда в строке запроса есть адрес электронной почты. Это относится к последней версии плагина, взятой со страницы проекта github сегодня.
Рабочие и нерабочие примеры
Процесс анализа заполняет внутренний объект parsed.queryKey
парами ключ: значение из строки запроса.
Предлагается два режима: «свободный» и «строгий». Оба возвращают один и тот же результат.
// Parse URL that works
jQuery.url.setUrl("http://example.com/?email=example.example.com");
// Examine result
parsed.queryKey = {
'email':'example.example.com'
}
// Parse URL that fails
jQuery.url.setUrl("http://example.com/?email=example@example.com");
// Examine result
parsed.queryKey = {
}
Задача
Я бы хотел иметь возможность изменить одно (или оба) регулярных выражений, чтобы решить проблему сбоя при разборе аргументов строки запроса при наличии символа '@'.
Парсер использует регулярные выражения для извлечения информации из URL. Они определены (что сейчас) строка 27 :
parser: {
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, //less intuitive, more accurate to the specs
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs
}
Я недостаточно понимаю работу этих регулярных выражений, чтобы иметь возможность вносить необходимые изменения.
Как я могу изменить регулярные выражения, чтобы позволить процессу синтаксического анализа работать, когда в строке запроса присутствует '@'?