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
中$..$
之间的元素全部取出来(a1
、x
、v8
)组成一个数组:
我把字符串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);
当然当运行以上代码时,所有a1
、x
、v8
元素都会被替换掉。虽然我只想替换数学表达式 (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
我有一个 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
中$..$
之间的元素全部取出来(a1
、x
、v8
)组成一个数组:
我把字符串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);
当然当运行以上代码时,所有a1
、x
、v8
元素都会被替换掉。虽然我只想替换数学表达式 (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