【问题标题】:How to get value from one of several possible URL parameters?如何从几个可能的 URL 参数之一中获取值?
【发布时间】:2019-08-26 07:18:18
【问题描述】:

我想从 url 参数中检索值,但参数不是常量:它可以是“referer=”或“utm_source=”或“来源="。

我可以通过

获得价值
url.searchParams.get("referer");

现在完成脚本:

function() {
var url_string = window.location.href;
var url = new URL(url_string);
var ref = url.searchParams.get("referer");

if (ref == undefined) {
 return "No Referer";
} else {
  return ref; 
}
}

我可以包含一些正则表达式吗:

var ref = url.searchParams.get.match(/referer|source|utm\_source/g);

【问题讨论】:

  • 任何一个参数都可以完全正确?
  • 可以迭代url.searchParams.keys()

标签: javascript url parameters url-parameters


【解决方案1】:

我可以包含一些正则表达式

没有。这不是get 的功能。

你可以使用一组||s:

var ref = url.searchParams.get("referer") || url.searchParams.get("source") || url.searchParams.get("utm_source");

或者取一个键名数组,将它们映射到 URL 中的值,过滤掉任何没有值的值,然后从数组中取出第一个(可能是唯一的)值。

var possible_key_names = ["referer", "source", "utm_source"];
var ref = possible_key_names
    .map(name => url.searchParams.get(name))
    .filter(value => !!value)
    .shift();

【讨论】:

  • 我刚刚测试了您的第一个解决方案,似乎效果很好!
【解决方案2】:

您可以像这样遍历searchParams

var url = new URL("https://example.com/page?referer=&utm_source=google");
var value;
for (var [key, val] of url.searchParams) {
  if (key.match(/^(referer|source|utm_source)$/) && val !== "") {
    value = val;
    break;
  }
}
console.log(value);

【讨论】:

  • 我收到此错误消息:“此语言功能仅支持 ECMASCRIPT6 或更好的模式:for-of 循​​环。”
  • @B4b4j1 您可以使用forEach(如果可用),但我似乎喜欢其他答案中的map 想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多