Reputation: 105
I have a url and I want to replace the query string. For example
www.test.com/is/images/383773?wid=200&hei=200
I want to match the wid=
and hei=
and the numbers don't have to be 200
to replace the whole thing so it should look like this.
Expected
www.test.com/is/images/383773?@HT_dtImage
So I've tried doing but it only replaced the matching wei
and hei
.
const url = "www.test.com/is/images/383773?wid=200&hei=200"
url.replace(/(wid)(hei)_[^\&]+/, "@HT_dtImage")
Upvotes: 1
Views: 183
Reputation: 163467
You can match either wid= or hei= until the next optional ampersand and then remove those matches, and then append @HT_dtImage
to the result.
\b(?:wid|hei)=[^&]*&?
The pattern matches:
\b
A word boundary to prevent a partial word match(?:wid|hei)=
Non capture group, match either wid
or hei
followed by =
[^&]*&?
Match 0+ times a char other than &
, and then match an optional &
See a regex demo.
let url = "www.test.com/is/images/383773?wid=200&hei=200"
url = url.replace(/\b(?:wid|hei)=[^&]*&?/g, "") + "@HT_dtImage";
console.log(url)
Upvotes: 2
Reputation: 25408
You can make use of lookaround using regex /\?.*/
const url = 'www.test.com/is/images/383773?wid=200&hei=200';
const result = url.replace(/\?.*/, '?@HT_dtImage');
console.log(result);
Upvotes: 0
Reputation: 522141
I would just use string split here:
var url = "www.test.com/is/images/383773?wid=200&hei=200";
var output = url.split("?")[0] + "?@HT_dtImage";
console.log(output);
If you only want to target query strings havings both keys wid
and hei
, then use a regex approach:
var url = "www.test.com/is/images/383773?wid=200&hei=200";
var output = url.replace(/(.*)\?(?=.*\bwid=\d+)(?=.*\bhei=\d+).*/, "$1?@HT_dtImage");
console.log(output);
Upvotes: 2