[英]Regular Expression to replace variable with variable
我有一些看起来像这样的字符串:
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'
部分的通配符。
如果只需要更改数字,则只需更改数字:
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);
如果要查找数字,则应使用\\d
。 这将匹配所有数字。 对于任何字符串,都可以使用延迟搜索( .*?
),它将与任何字符匹配,直到找到下一个字符为止。
在替换中,您可以使用$1
来使用(
和)
之间的第一个组的值,这样就不会丢失“任何字符串”值。
现在,您只需执行以下操作:
var newNumber = 15; var newString = "var string = popupLink(25, 'Any string')".replace(/popupLink\\(\\d+, '(.*?)'\\)/, "popupLink(" + newNumber + ", '$1')"); console.log(newString);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.