字符串之后的Javascript正则表达式匹配编号

时间:2017-04-07 15:09:47

标签: javascript regex

我有这个字符串

/results?radius=4000&newFilter=true

我需要将radius=4000替换为radius=n,其中n是变量。

如何使用String.replace()方法与正则表达式匹配该部分?

6 个答案:

答案 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']);

这个回答来自这篇文章:How to get the value from the GET parameters?

答案 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)

ES6与正则表达式使用正面lookbehind

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;