Как получить значение параметра запроса URL с динамическим именем?

#javascript

#javascript

Вопрос:

Мне нужно извлечь значение параметра запроса из URL-адреса, но параметр меняется на каждой странице.

Например, я хочу получить переменную color, но она всегда меняется в зависимости от ProductID. В этом случае это ‘dwvar_2000440926_color’, но для другого продукта это будет ‘dwvar_545240926_color’. _color остается неизменным, поэтому я хотел бы отключить это:

https://www.example.com/us/2000440926.html ?dwvar_2000440926_цвет=02

Спасибо!

Ответ №1:

Базовое регулярное выражение будет работать

 const myURL = new URL("https://www.example.com/us/2000440926.html?dwvar_2000440926_color=02")

console.log(myURL.search.match(/_color=([^amp;] )/)[1]);

// more specfic
console.log(myURL.search.match(/dwvar_d _color=([^amp;] )/)[1]); 

Комментарии:

1. Отлично работает — спасибо!

Ответ №2:

Вы должны использовать регулярное выражение. Основываясь на описанном вами описании поведения URL, вы могли бы сделать что-то вроде этого:

 const url = new URL("https://www.example.com/us/2000440926.html?dwvar_2000440926_color=02");

// Now url.search contains your query parameters.
// We gonna apply the regex on it to capturing the color id
let matches = url.search.match(/dwvar_d _color=(d )/)

// `matches` now contains the captured groups
console.log(matches[1])
// log : 02

 

Ответ №3:

Предполагая, что 1) вы хотите сделать это на стороне клиента 2) параметр цвета всегда начинается с dwvar , как показано в вашем примере, и 3) что никогда не существует более одного параметра dwvar, вы можете использовать следующий javascript:

 let searchParams = new URLSearchParams(document.location.search);
searchParams.forEach((param_value, param_name) => {
  if (param_name.indexOf('dwvar') == 0) {
    console.log(param_value)
  }
})
 

Ответ №4:

 window.location.search.slice(1).split('amp;').reduce((acc, it) => {
  const [key, val] = it.split('=');
  return {
  ...acc,
      [key]: val,
  };
}, {});