Удаление параметров utm_ * из URL в javascript с помощью регулярного выражения - PullRequest
0 голосов
/ 05 июля 2018

Я не нашел хорошего ответа на этот вопрос, поэтому я делюсь тем, что нашел и работает

если вы хотите удалить все термины Google Analytics из URL-адреса, вы в основном хотите сохранить другие параметры и получить чистый действительный URL-адрес в конце

url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "$1");

с таким URL https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?utm_source=325483&utm_medium=affiliation&utm_content=catalogue-RDC&awc=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249

вы получите это https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?&&&awc=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249

этот URL-адрес уже действителен, но у нас есть некоторые дураки и знаки Если вы удалите 1 доллар США из первого запроса, вы будете использовать только знак &, а не знак? что вы должны иметь в начале

итак, следующую уборку мы оставим первой? подписать => $ 1 и удалить другой ведущий &

url = url.replace(/(\?)\&+/igm, "$1");

здесь у нас есть хороший чистый URL

полная версия:

url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "$1");
url = url.replace(/(\?)\&+/igm, "$1");

если вы можете найти один лайнер, пожалуйста

Редактировать: результирующий URL должен быть таким: https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?awc=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете использовать одно регулярное выражение, совместимое со всеми версиями JS, которое будет

  • сопоставьте и захватите ?, за которым следует 1 или более utm параметров, за которыми следует параметр, отличный от utm, и замените на $1 для восстановления этого ?, поскольку это необходимо
  • или, сопоставьте любой ? с 1 или более utm параметрами в строке запроса, где нет других параметров, кроме utm (таким образом, $1 будет пустым, а ? будет удален)
  • или просто сопоставьте все параметры utm, чтобы удалить их.

регулярное выражение будет выглядеть как

.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1')

См. regex demo

Детали

  • (\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=) - ?utm? внутри группы захвата, на которую позднее ссылается $1), 0+ символов, отличных от &, а затем 0 или более повторений &utm, за которыми следует 0+ символы, отличные от &, а затем &, за которым следуют 0+ символов, отличных от пробелов, & и =, а затем =, которые не utm param
  • | - или
  • \?utm[^&]*(?:&utm[^&]*)*$ - ?utm, 0+ символов, отличных от &, затем 0 или более повторений &utm, за которыми следуют 0+ символов, отличных от &, и затем конец строки
  • | - или
  • &utm[^&]* - &, utm, а затем 0+ символов, отличных от &

JS демо:

0 голосов
/ 05 июля 2018

Я думаю, это может быть так просто, как: url = url.replace(/(?<=&|\?)utm_.*?(&|$)/igm, "");

Вам не нужно бежать &

(?<=&|\?) = позитивный взгляд за спиной

.*? = все, но "не жадный"

...