2016-11-05 5 views
0

Я хотел бы анализировать url-запрос с помощью regex.Анализ параметров запроса URL-адресов с использованием regex

Вещи я должен был рассмотреть следующие вопросы: 1) PARAMS может быть из строя 2) только некоторые PARAMS должны соответствовать

Учитывая строку запроса:?»Param1 = test1 & param2 = test2 & parm3 = test3 " Я хотел бы запустить javascript regex, чтобы проанализировать значение param1 и значение param3.

Регулярное выражение я придумал до сих пор:

/(?:[?&](?:param1=([^&]*)|param3=([^&]*)|[^&]*))+$/g 

Это регулярное выражение, кажется, работает хорошо для меня в таких сайтах, как https://regex101.com/.

Однако, когда я запускаю JS-метод ниже, я всегда получаю undefined для $ 2, что и должно значить значение параметра param1. Любая помощь или предложение?

"?param1=test1&param2=test2&param3=test3".replace(
/(?:[?&](?:param1=([^&]*)|param3=([^&]*)|[^&]*))+$/g, 
function ($0, $1, $2, $3) { return $0 + ' ' + $1 + ' ' + $2 + ' ' + $3; }); 

Это возвращает $ 2 как неопределенное и $ 3 как test3. Однако, если я исключаю param2 и param3 из строки запроса url, я успешно могу проанализировать param1 как $ 2. Немного смутился.

спасибо!

+0

Добавить с меткой javascript – prasanth

+0

Каков ваш ожидаемый результат замены? – Damon

+0

Мне бы хотелось, чтобы $ 0 и $ 1 выводили 'test1' и 'test3', на самом деле это может быть ограничение javascript: http://stackoverflow.com/questions/3537878/how-to-capture-an-arbitrary-number-of -groups-in-javascript-regexp –

ответ

0

Если они находятся в произвольном порядке, вы можете использовать lookaheads, чтобы найти их и получить значения параметров. Шаблон, который вы хотите (для тестовой строки) заключается в следующем:

^(?=.*param1=([^&]+)|)(?=.*param2=([^&]+)|)(?=.*param3=([^&]+)|).+$ 

Demo on Regex101

Она также будет принимать строки запроса, которые отсутствуют параметры, потому что каждый чередуется по касательно последующей либо параметр пары/значения или пустую строку, используя в конце |.

Для каждого параметра, который вы хотите захватить, вам понадобится дополнительный просмотр, и нет никакого способа обойти это. Поскольку каждое регулярное выражение под солнцем составляет state machine под капотом, единственное, что вы собираетесь использовать в своем оригинальном шаблоне, - это последнее совпадение для данной группы захвата.

Смежные вопросы