如何使用正则表达式从 url 中删除参数

How to strip arguments from url using regex

我想从 URL 中删除某些参数。

比如说:

给定的 url 是 www.abc.com/def.php?xyz=pqr&efg=ijk,我想删除 xyz=<value> 中的所有参数,那么最终的 url 应该看起来像 www.abc.com/def.php?efg=ijk

目前,我正在 url.

的 3 次遍历中执行此操作

function(str) {
  if (str != null) return str.replace(/&?'(xyz|arg2|arg3)'=[^&#]*/g, '"'
    '"');
}

function(str) {
  if (str != null) return str.replace(/\??&/, '"' ? '"');
}

function(str) {
  if (str != null) return str.replace(/\?$/, '"'
    '"');
}

能否将所有 3 个正则表达式合并为一个正则表达式?

这似乎适用于我的测试用例:

(Javascript Pattern Demo)

模式:/\?(?:xyz|arg2|arg3)=[^&#]*(?=$|#)|&(?:xyz|arg2|arg3)=[^&#]*|(?:xyz|arg2|arg3)=[^&#]*&/

实际上,它表示:

  1. 如果查询字符串中只有一对键值对,则只匹配 ?(查询字符串的开头)。
  2. 如果可能,将前导 & 与键值对匹配。
  3. 如果不可能,则匹配尾随 &

如果您有一个字符串打破了这种模式,请告诉我,我会尽力修复它。