繁体   English   中英

字符串后的Javascript正则表达式匹配数

[英]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);

通过这种方式,您也可以使用它来获取所有请求的参数,并且它没有十进制绑定

使用正则表达式的正则表达式ES6

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM