new RegExp() 构造函数的逆向是什么?

What is the reverse of the new RegExp() constructor?

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

var $str$ = str1.match(/$+[^$]+$/g).toString();
var str = $str$.substring(1,$str$.length-1);
var wr = str.match(/\w\d|[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