【问题标题】:What is the reverse of the new RegExp() constructor?new RegExp() 构造函数的反面是什么?
【发布时间】: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中的那个规则(T1a1,...)替换,但只有数学表达式中的元素,我做了以下: 我取出str1a1xv8)中$..$之间的所有元素组成一个数组: 我提取了字符串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 进行了很多研究,但没有找到解决方案。我请求你的帮助,谢谢。

【问题讨论】:

  • 如何定义表达式中的内容? ( 和 ) 之间的任何内容?
  • 我还要指出replace 的字符串版本只替换了第一次出现。
  • 我只需要应用条件:字符后不是字母或数字(\W)。

标签: javascript regex script


【解决方案1】:

您的解决方案几乎是正确的,但正则表达式中的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

【讨论】:

  • 我在这里读到:[链接](w3schools.com/jsref/…),但我真的不明白。太好了,您帮助我理解了这个问题,非常感谢 Udith Gunaratna
  • @Letone 如果上述答案有效,请将其标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 2018-07-30
  • 1970-01-01
  • 2013-12-16
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
相关资源
最近更新 更多