使用正则表达式从 javascript 中的 URL 中删除 utm_* 参数
Removing utm_* parameters from URL in javascript with a regex
我没有找到这个问题的任何好的答案所以我分享我的发现和工作
如果您想从 URL 中删除所有 google 分析术语,您主要希望保留其他参数并在末尾获得干净有效的 URL
url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "");
像这样的 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,您将只使用 & 符号而不是 ?你一开始就应该有
所以下一次清理我们保留第一个? sign => $1 并删除另一个前导 &
url = url.replace(/(\?)\&+/igm, "");
我们这里干净整洁URL
完整版:
url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "");
url = url.replace(/(\?)\&+/igm, "");
如果你能找到一个班轮,不客气
编辑:结果 URL 应该是这个:https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?awc=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249
我认为它可以像这样简单:
url = url.replace(/(?<=&|\?)utm_.*?(&|$)/igm, "");
不需要转义&
(?<=&|\?)
= 正面回顾
.*?
= 一切,但 "not greedy"
您可以使用与所有 JS 版本兼容的单一正则表达式
- 匹配并捕获
?
后跟 1 个或多个 utm
参数后跟 utm
以外的参数并替换为 </code> 以恢复<code>?
因为有必要
- 或者,将任何
?
与查询字符串中的 1 个或多个 utm
参数匹配,其中除了 utm
之外不存在其他参数(因此,</code> 将是为空,<code>?
将被删除)
- 或者,只匹配所有
utm
参数以删除它们。
正则表达式看起来像
.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '')
详情
(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)
- ?utm
(?
在稍后用 </code> 引用的捕获组中),除 <code>&
之外的 0+ 个字符,然后&utm
的 0 次或多次重复后跟除 &
以外的 0+ 个字符,然后是 &
后跟 0+ 个除空格以外的字符,&
和 =
然后 =
不是 utm
param
|
- 或
\?utm[^&]*(?:&utm[^&]*)*$
- ?utm
,&
以外的 0+ 个字符,然后 &utm
的 0 次或多次重复,后跟 [=27 以外的 0+ 个字符=] 然后是字符串的结尾
|
- 或
&utm[^&]*
- 一个 &
、utm
然后 &
以外的 0+ 个字符
JS 演示:
var urls = ['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?t=55&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&utm_tt=78', 'https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?utm=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249&utm=ewe'];
var u = 'utm[^&]*';
var rx = new RegExp("(\?)"+u+"(?:&"+u+")*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?"+u+"(?:&"+u+")*$|&"+u, "ig");
for (var url of urls) {
console.log(url, "=>", url.replace(rx, ''));
}
我没有找到这个问题的任何好的答案所以我分享我的发现和工作
如果您想从 URL 中删除所有 google 分析术语,您主要希望保留其他参数并在末尾获得干净有效的 URL
url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "");
像这样的 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,您将只使用 & 符号而不是 ?你一开始就应该有
所以下一次清理我们保留第一个? sign => $1 并删除另一个前导 &
url = url.replace(/(\?)\&+/igm, "");
我们这里干净整洁URL
完整版:
url = url.replace(/(\&|\?)utm([_a-z0-9=+\-]+)/igm, "");
url = url.replace(/(\?)\&+/igm, "");
如果你能找到一个班轮,不客气
编辑:结果 URL 应该是这个:https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?awc=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249
我认为它可以像这样简单:
url = url.replace(/(?<=&|\?)utm_.*?(&|$)/igm, "");
不需要转义&
(?<=&|\?)
= 正面回顾
.*?
= 一切,但 "not greedy"
您可以使用与所有 JS 版本兼容的单一正则表达式
- 匹配并捕获
?
后跟 1 个或多个utm
参数后跟utm
以外的参数并替换为</code> 以恢复<code>?
因为有必要 - 或者,将任何
?
与查询字符串中的 1 个或多个utm
参数匹配,其中除了utm
之外不存在其他参数(因此,</code> 将是为空,<code>?
将被删除) - 或者,只匹配所有
utm
参数以删除它们。
正则表达式看起来像
.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '')
详情
(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)
-?utm
(?
在稍后用</code> 引用的捕获组中),除 <code>&
之外的 0+ 个字符,然后&utm
的 0 次或多次重复后跟除&
以外的 0+ 个字符,然后是&
后跟 0+ 个除空格以外的字符,&
和=
然后=
不是utm
param|
- 或\?utm[^&]*(?:&utm[^&]*)*$
-?utm
,&
以外的 0+ 个字符,然后&utm
的 0 次或多次重复,后跟 [=27 以外的 0+ 个字符=] 然后是字符串的结尾|
- 或&utm[^&]*
- 一个&
、utm
然后&
以外的 0+ 个字符
JS 演示:
var urls = ['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?t=55&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&utm_tt=78', 'https://www.somewebsite.fr/produit/yi-camera-3600-noir-vr-33705370/offre-81085802?utm=6901_1530705916_88ef12642ad61dfc5239ba01bbbe5249&utm=ewe'];
var u = 'utm[^&]*';
var rx = new RegExp("(\?)"+u+"(?:&"+u+")*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?"+u+"(?:&"+u+")*$|&"+u, "ig");
for (var url of urls) {
console.log(url, "=>", url.replace(rx, ''));
}