对于这个问题,我没有找到任何好的答案,所以我分享了我的发现和工作成果
如果您要从网址中删除所有Google Analytics(分析)条款,则主要希望保留其他参数并在末尾获得一个干净有效的网址
url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "$1");
具有这样的网址
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
此网址已经有效,但我们有一些欺骗和标志 如果您从第一个请求中删除了$ 1,则只会带有&符号,而不是?一开始应该有的
那么下一次清理我们保留第一个吗? sign => $ 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
答案 0 :(得分:1)
我认为这可能很简单:
url = url.replace(/(?<=&|\?)utm_.*?(&|$)/igm, "");
您不需要逃脱&
(?<=&|\?)
=正向后看
.*?
=一切,但“不是贪婪”
答案 1 :(得分:1)
您可以使用与所有JS版本兼容的单个正则表达式
?
,后跟1个或多个utm
参数,后跟utm
以外的其他参数,并替换为$1
以恢复该{ {1}},因为有必要?
与1个或多个?
参数进行匹配,其中除utm
以外不存在其他参数(因此utm
将为空,并且$1
将被删除)?
参数即可将其删除。正则表达式看起来像
utm
请参见regex demo
详细信息
.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1')
-(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)
(其中?utm
在捕获组中,以后用?
引用),除$1
以外的0个字符,然后为0或&
的更多重复,其次是&utm
以外的0+个字符,然后是&
,其后是空格,&
和&
之外的0+个字符然后是不是=
参数的=
utm
-或|
-\?utm[^&]*(?:&utm[^&]*)*$
,除?utm
以外的0多个字符,然后重复&
的0或多个重复,其次是&utm
以外的0+字符然后是字符串的结尾&
-或|
-一个&utm[^&]*
,&
,然后是除utm
以外的0+个字符JS演示:
&