使用正则表达式从JavaScript中的网址中删除utm_ *参数

时间:2018-07-05 09:13:07

标签: javascript node.js regex url clean-urls

对于这个问题,我没有找到任何好的答案,所以我分享了我的发现和工作成果

如果您要从网址中删除所有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

2 个答案:

答案 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演示:

&