[英]Javascript regex match number after string
我有这串
/results?radius=4000&newFilter=true
我需要将radius=4000
替换radius=4000
radius=n
,其中n是一个变量。
如何在正则表达式中使用String.replace()
方法来匹配该部分?
您可以使用/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);
如果要获取所有参数,可以尝试以下操作:
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']);
这个答案来自这篇文章: 如何从GET参数获取值?
它应该像
var str='/results?radius=4000&newFilter=true';
var n = 1234;
str = str.replace(/(radius=)(\d+)/, "$1" + n);
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);
通过这种方式,您也可以使用它来获取所有请求的参数,并且它没有十进制绑定
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)
是正向的 。 changeRadius()
函数的主体可以替换为string.replace(/radius=\\d+/, 'radius=' + n)
。 它可能具有更好的性能,但是原始正则表达式可以更直接地解决问题。
您可以使用捕获功能而不必记住匹配项,仅捕获“ radius =”之后的数值。
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
'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.