You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式移除URL中的重复GET查询参数

问题原因

你原来写的正则没有针对URL参数的键=值结构做匹配,匹配范围太宽导致字符被误吞,自然得不到预期结果。

方案1:纯正则实现

针对你给出的示例场景,可以用下面的正则直接匹配重复的参数键值对做删除:

let url = "/courses?category=programming&filter=free&filter=free"
const res = url.replace(/([?&])([^=]+=[^&]+)(?=.*\1\2)/g, '');
console.log(res) // 输出 /courses?category=programming&filter=free

正则逻辑说明:

  • ([?&]) 匹配参数前的?或者&分隔符,记为分组1
  • ([^=]+=[^&]+) 匹配完整的键=值结构,记为分组2
  • (?=.*\1\2) 正向预查,判断后面是否还会出现完全相同的「分隔符+键值对」组合,存在就删除当前匹配的内容,最终只会保留最后一次出现的键值对。

方案2:更稳妥的内置API实现(推荐)

正则处理URL容易遇到参数值含特殊字符、参数顺序异常等边界问题,用JS原生的URLSearchParams处理鲁棒性更高:

let url = "/courses?category=programming&filter=free&filter=free"
const [path, queryString] = url.split('?');
// 无参数直接返回原地址
if (!queryString) {
  console.log(url);
}
const params = new URLSearchParams(queryString);
const uniqueMap = new Map();
// 遍历参数,重复键只保留最后一个值
for (const [key, value] of params.entries()) {
  uniqueMap.set(key, value);
}
// 拼接最终URL
const res = `${path}?${new URLSearchParams(uniqueMap).toString()}`;
console.log(res) // 输出 /courses?category=programming&filter=free

内容的提问来源于stack exchange,提问作者Kasra Alizadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:45:01