新的RegExp()构造函数的反面是什么



我有一个RegExp问题,需要帮助。我有两个字符串str1 = "abcde $a1$ cdeg $x$ fghj $v8$ ABCDEa1FGH $a1$ LMN"str2 = "NMNa1CD (a1+x)/(v8-x+a1) dgd"。我用T1代替a1,用T2代替x,在str1中用T3代替v8(介于$...$之间)。现在我想根据str2中的规则(T1表示a1,...)进行替换,但只替换数学表达式中的元素,我做了以下操作:我取出str1$..$之间的所有元素(a1xv8),形成一个数组:我提取了字符串str1$..$之间的所有元素,以形成一个数组:

var $str$ = str1.match(/$+[^$]+$/g).toString();
var str = $str$.substring(1,$str$.length-1);
var wr = str.match(/wd|[a-z]/g);
var newWr = unique(wr);//here is a function that merges duplicate elements in an array

然后我找到并替换字符串str2:中的元素

for (var i =0;i <= newWr.length-1;i++){
var x = newWr[i];
var str2 = str2.replace(x,"T"+(i+1));
Logger.log(str2);

当然,当运行上述代码时,所有a1xv8元素都将被替换。而我只想替换数学表达式(a1+x)/(v8-x+a1)中的元素。我使用RegExp如下

var str2 = str2.replace(/x(?=W)/g,"T"+(i+1));

但它没有起作用。我已经研究了很多关于RegExp的问题,但还没有找到解决方案。我请求你的帮助,谢谢。

您的解决方案几乎是正确的,但正则表达式中的x应该是变量x的值,而不是字母x。因此,以下内容应该可以解决这个问题。

for (let i = 0; i <= newWr.length - 1; i++) {
let x = newWr[i];
const regex = new RegExp(`${x}(?=\W)`, 'g');
str2 = str2.replace(regex, "T" + (i + 1));
}
console.log(str2); // NMNa1CD (T1+T2)/(T3-T2+T1) dgd

最新更新