正则表达式用变量替换变量

时间:2017-09-05 12:11:43

标签: javascript regex

我有一些看起来像这样的字符串:

var string = popupLink(25, 'Any string')

我需要使用正则表达式来改变里面的数字(注意这是一个更大的字符串里面的字符串所以我不能简单地匹配和替换数字,它需要匹配完整的模式,这是什么我到目前为止:

var re = new RegExp(`popupLink\(${replace},\)`, 'g');
var replacement = `popupLink(${formFieldInsert.insertId},)`;
string = string.replace(re, replacement);

我无法弄清楚如何使用通配符来保持正则表达式中的'Any String'部分。

2 个答案:

答案 0 :(得分:1)

如果您只需要更改号码,只需更改号码:

string = string.replace(/popupLink\(\d+/, "popupLink(" + replacement);

示例:



var str = "var string = popupLink(25, 'Any string')";
var replacement = 42;
str = str.replace(/popupLink\(\d+/, "popupLink(" + replacement);
console.log(str);




如果你真的必须匹配完整的模式,并且"任何字符串"可以字面上是任何字符串,它更多,更多的工作,因为你必须允许引用引号,引号内的)等。我不认为只是由于嵌套,单个JavaScript正则表达式可以做到这一点。

如果我们可以在"任意字符串"中假设没有),那么它很容易;我们只是在数字后面找)以外的任何字符的范围:

str = str.replace(/(popupLink\()\d+([^)]*\))/, "$1" + replacement + "$2");

示例:



var str = "var string = popupLink(25, 'Any string')";
var replacement = 42;
str = str.replace(/(popupLink\()\d+([^)]*\))/, "$1" + replacement + "$2");
console.log(str);




答案 1 :(得分:1)

如果您要查找号码,请使用\d。这将匹配所有数字。 对于任何字符串,您可以使用延迟搜索(.*?),这将匹配任何字符,直到找到下一个字符。

在您的替换中,您可以使用$1来使用()之间的第一个组的值,这样您就不会丢失任何内容字符串'值。

现在,您只需执行以下操作:



var newNumber = 15;
var newString = "var string = popupLink(25, 'Any string')".replace(/popupLink\(\d+, '(.*?)'\)/, "popupLink(" + newNumber + ", '$1')");
console.log(newString);