我有这个字符串
/results?radius=4000&newFilter=true
我需要将radius=4000
替换为radius=n
,其中n是变量。
如何使用String.replace()
方法与正则表达式匹配该部分?
答案 0 :(得分:3)
您可以使用/radius=\d+/
来匹配" radius ="后跟任意数字的数字。有了这个,我们可以使用replace()
方法将其替换为所需的值:
var str = "/results?radius=4000&newFilter=true";
var replacement = 123;
var newStr = str.replace(/radius=\d+/, "radius=" + replacement);
console.log(newStr);

答案 1 :(得分:2)
如果您想获得所有参数,可以试试这个:
function getParams(uri) {
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(uri)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
var str='/results?radius=4000&newFilter=true';
str = str.substring(str.indexOf("?"));
params = getParams(str);
console.log(params);
console.log('radius => ', params['radius']);
答案 2 :(得分:1)
应该像
一样简单var str='/results?radius=4000&newFilter=true';
var n = 1234;
str = str.replace(/(radius=)(\d+)/, "$1" + n);
答案 3 :(得分:1)
var url = "/results?radius=4000&newFilter=true";
// or window.location.href for current url
var captured = /radius=([^&]+)/.exec(url)[1]; // your 4000
var newValue = 5000;
url = url.replace(captured, newValue);
通过这种方式,您可以使用它来获取所有请求的参数 并且它不是十进制绑定
答案 4 :(得分:1)
const string = '/results?radius=4000&newFilter=true',
n = '1234',
changeRadius = (radius) => string.replace(/(?<=radius=)\d+/, n);
console.log(changeRadius(n));
/* Output console formatting */
.as-console-wrapper { top: 0; }
changeRadius
是一个函数,它接受一个参数(radius
)并执行替换。\d+
获取尽可能多的数字,(?<=STRING)
为positive lookbehind。 changeRadius()
函数的正文可以替换为string.replace(/radius=\d+/, 'radius=' + n)
。它可能具有更好的性能,但原始正则表达式是更直接的问题翻译。
答案 5 :(得分:0)
您可以在不记住匹配的情况下使用捕获来仅捕获&#39; radius =&#39;之后的数值。
var url = "/results?radius=4000&newFilter=true";
var radius = 123;
var newUrl = url.replace(/(?:radius=){1}(\d+)/, radius);
console.log(newUrl); // logs '/results?radius=4000&newFilter=true'0
&#39;