В зависимости от спецификаций кодировки URL, эта задача может быть невозможно выполнить однозначно.Для того чтобы это было возможно, URL-адреса в наборе данных должны быть стандартизированы таким образом, чтобы после каждого параметра был знак равенства, а в значениях параметров не должно быть других случайных знаков равенства.Если оба эти условия выполняются, то будет работать следующее:
Регулярные выражения
&(firstName|lastName|email|phone1|address)=([^&]*(?:&[^&=]+(?=&|$))*)
Также обратите внимание, что это регулярное выражение работаетНе охватывают случаи, когда один из желаемых параметров является первым параметром.Поскольку регулярное выражение Javascript ограничено, и в любом случае это особый случай (начинающийся с ?
вместо &
), это нужно будет обрабатывать по-разному, в зависимости от того, что вы хотите сделать с параметрами.Совпадение следующего и замена на ?
- это способ удалить параметр:
\?(firstName|lastName|email|phone1|address)=([^&]*(?:&[^&=]+(?=&|$))*)(?:&|$)
Если вы не планируете полностью удалить параметр,(?:&|$)
в конце выражения может быть удален для простоты.
В зависимости от того, что вы планируете заменить параметрами, может оказаться полезным изменить выражения, но обычно они должны давать желаемоевывод в указанных выше правилах.
Как это работает
Хитрость здесь в том, чтобы иметь отдельную группу без захвата (?:&[^&=]+(?=&|$))*
, которая обрабатывает дополнительные части строки параметра с необработанными амперсандами, но не равнызнак.Класс символов [^&=]+
гарантирует, что подвыражение не имеет амперсандов или знаков равенства, а предварительный просмотр (?=&|$)
гарантирует, что за строкой следует другой параметр или конец строки, а не знак равенства.Вся группа имеет квантификатор *
, так как он может появляться ноль, один или несколько раз после исходного параметра.
Также обратите внимание, что для удобства значения имени и значения параметра хранятся в группы захвата 1 и 2, для легкого доступа и анализа.Если вы не планируете использовать значения, их можно заменить на группы без захвата, добавив ?:
после (
.
Отказ от ответственности
Если какие-либо параметры отсутствуютзнак равенства, нет никакого способа однозначно устранить неоднозначность новых параметров url из значений для предыдущего параметра url, поскольку в примере https://example.com?&iframeLoad=true&email=abc&xyz@.com
это может относиться либо к одному параметру с именем email
со значением abc&xyz@.com
, либо к двумпараметры с именами email
и xyz@.com
(если только список строк параметров и список строк значений не стандартизированы, но на этом пути лежит безумие).Подобным образом, случайные знаки равенства обманывают парсер.Как упоминал @David Faber, обычно символ &
в URL-адресе кодируется в URL-адресе как %26
, чтобы полностью исключить эту неоднозначность.