【发布时间】:2021-11-09 07:02:33
【问题描述】:
我有一个需要帮助的正则表达式问题。
我有两个字符串str1 = "abcde $a1$ cdeg $x$ fghj $v8$ ABCDEa1FGH $a1$ LMN"和str2 = "NMNa1CD (a1+x)/(v8-x+a1) dgd"。我将T1 替换为a1,将T2 替换为x,将T3 替换为v8 中的v8($...$ 之间的那些)。现在我想根据str2中的那个规则(T1为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 进行了很多研究,但没有找到解决方案。我请求你的帮助,谢谢。
【问题讨论】:
-
如何定义表达式中的内容? ( 和 ) 之间的任何内容?
-
我还要指出
replace的字符串版本只替换了第一次出现。 -
我只需要应用条件:字符后不是字母或数字(
\W)。
标签: javascript regex script