繁体   English   中英

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

[英]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.

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