0

I need to obtain parameter values from url string

http://example.com/admin/param1/value1/param2/value2

I did it already using this:

url.split('/param1/')[1].split('/')[0].replace(/\/$/, '');

But is there any cleaner alternative ? Something like this ?

var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);

searchParams don't give desired results in this case. Pardon if there is already an answer out there. I couldn't find.

Please read the question carefully before marking it as duplicate.

shreyas d
  • 774
  • 1
  • 4
  • 16

1 Answers1

1

Assuming the URL always has /admin/ in it, you could do it like so:

var testUrls = [
    "http://example.com/admin/param1/value1/param2/value2",
    "http://example.com/admin/name/John/age/50/paramWithNoVal",
];

for (var i = 0; i < testUrls.length; i++) {
    var url        = testUrls[i];
    var paramArray = url.split("/admin/")[1].split("/");
    var paramObj   = {};

    for (var x = 0; x < paramArray.length; x++) {
        // i is even - assume this is a param name
        if (x % 2 === 0) {
            paramObj[paramArray[x]] = paramArray[x + 1] || null;
        }
    }

    console.log(paramObj);
}

Edit: as a function:

function getUrlParams(url) {
    var paramArray = url.split("/admin/")[1].split("/");
    var paramObj   = {};

    for (var x = 0; x < paramArray.length; x++) {
        if (x % 2 === 0) {
            paramObj[paramArray[x]] = paramArray[x + 1] || null;
        }
    }

    return paramObj;
}

var url    = "http://example.com/admin/param1/value1/param2/value2";
var params = getUrlParams(url);

console.log(params["param1"]);
console.log(params["param2"]);
user7290573
  • 1,320
  • 1
  • 8
  • 14