B4b4j1
B4b4j1

Reputation: 460

How to get value from one of several possible URL parameters?

I want to retrieve values form url parameters, but the parameters are not constant: it can be "referer=" or "utm_source=" or "source=".

I can get the value with

url.searchParams.get("referer");

Complete script for now :

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; 
}
}

Can I include some regex like:

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

Upvotes: 1

Views: 425

Answers (2)

Salman Arshad
Salman Arshad

Reputation: 272256

You can loop over the searchParams like so:

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);

Upvotes: 1

Quentin
Quentin

Reputation: 944016

Can I include some regex

No. That isn't a feature of get.

You can use a set of ||s:

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

Or take an array of key names, map them to the values in the URL, filter out any which don't have a value, then take the first (and presumably only) value off the array.

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

Upvotes: 3

Related Questions