【问题标题】:Function edit needed需要功能编辑
【发布时间】:2020-06-11 22:39:05
【问题描述】:

目前,以下代码采用 href 并排列所有稍后要调用的参数:

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

这适用于在 URL 中设置参数的 href,例如 parameter=value。我在网上找到了这个函数,不懂很多 javascript,但需要对其进行编辑,以便 = 不是参数和值之间的分隔因子,而是 %3A。因此,例如参数%3Avalue,由于我正在处理的网站上的格式不同。我不确定该功能是如何工作的,所以我很难编辑它。感谢您的帮助。

【问题讨论】:

  • /[?&]+([^=&]+)%3A([^&]*)/gi?
  • 如果我这样做,字典会返回空。
  • 你能提供一些实际的例子吗
  • 也许将您的正则表达式更改为[?&]+([^%3A&]+)%3A([^&]*) 可以解决问题。另外,您确实需要更改问题的标题:)

标签: javascript url href


【解决方案1】:
/[?&]+([^=&]+)%3A([^&]*)/gi

例如:?parameter%3Avalue

/([^=&]+)%3A([^&]*)/gi

对于类似的东西:参数%3Avalue

它正在使用匹配字符串的一部分的正则表达式。并且 replace 方法将用第二个参数替换匹配的部分(在您的示例中为函数)。下次您可以使用正则表达式测试器,例如https://regex101.com

【讨论】:

  • 当我在代码中使用该替换时,字典返回为空。 f=make%3AAcura&f=drivetrain%3AAll-Wheel%20Drive 是我试图从中提取值的 url 的一部分。
【解决方案2】:

如果您需要解码格式的多个项目,您应该先尝试将 decodeURIComponent 应用于 href 字符串。如果它只是您想要从头到尾解码的 %3A,那么首先解码它可能是最简单的(这样字符串看起来确实使用了= 符号)。

function getUrlVars() {
        var vars = {};

        var partsWithEqSign = window.location.href.replace(/%3A/g, "=");

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

顺便说一句,正在使用的代码涉及正则表达式,这是 JavaScript 中最困难的概念之一,但一旦你学会它们就会非常有用。

【讨论】:

  • 这真是一个我没有想到的好主意。 url 也使用 = ,这不是我需要的,所以可能需要用其他东西替换它们。我会尝试这种方法并回复您。
  • 太棒了。很高兴听到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
相关资源
最近更新 更多