解析带有“&”字符的 URL 参数,后面没有“=”

Wan*_*nda 5 html javascript regex string object

我有以下代码,因此我可以从 url 获取参数。

然而,其中一个参数&在文本中有一个符号,导致文本被截断。我如何让 & 符号在它后面显示相应的文本?

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

 var cmp = getUrlVars()["cmp"];
    document.getElementById("currentMemberPackage").value = cmp;
    var replaced = cmp.replace(/%20/g, " "); 
Run Code Online (Sandbox Code Playgroud)

示例 URL = ?Club%20Plus%20Health%20&%20Fitness(我无法更改它,因为它&在推送到 URL 的数据中具有)

显示: Club Plus Health

应该是: Club Plus 健康与健身

Wik*_*żew 2

这是数据提供者方面的错误,请告知数据提供者,因为该问题应该得到修复。

如果您知道所有可能的键值并且它们不是太多,则有一种方法可以 100% 正确地提取值。在这种情况下,正则表达式可能看起来像

new RegExp("[?&]+([^=&]+)=(.*?)(?=&(?:" + your_keys.map(function(x) {return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');}).join("|") + ")=|$)", "gi")
Run Code Online (Sandbox Code Playgroud)

有一个脆弱的通用非 100% 解决方法,例如

/[?&]+([^=&]+)=(.*?)(?=&[^=&]+=|$)/gi
Run Code Online (Sandbox Code Playgroud)

请参阅此正则表达式演示。您可以使用它,直到数据提供商解决问题并且您不知道所有可能的密钥。

细节

  • [?&]+- 1 个或?多个&字符
  • ([^=&]+)=- 第 1 组:除了和之外的一个或多个字符&
  • = - 等号
  • (.*?)- 第 2 组:除了换行符之外的任何 0+ 个字符,尽可能少
  • (?=&[^=&]+=|$)- 后跟、除and&之外的一个或多个字符以及 then或字符串末尾。=&=