使用正则表达式从每个位置搜索字符串,以便找到重叠匹配

时间:2016-09-18 20:32:36

标签: javascript regex

我的正则表达式没有找到重叠的匹配,有没有办法找到它们?

说明问题的示例正则表达式:/(\d\*x\^(\d))\+(\d\*x\^(\d))/g

执行此正则表达式的字符串:3*x^2+2*x^3+6*x^2

匹配:3*x^2+2*x^3

所需匹配:3*x^2+2*x^32*x^3+6*x^2

我想在替换函数中使用它,并检查第一个数字是否大于第二个数字,如果是这种情况,它应该切换它们。因为它不匹配重叠匹配,所以它不起作用。

我检查了另一个关于此的答案,但不知道如何使用JavaScript中的替换功能来实现它。

到目前为止我已经知道了这一点:

var string1 = "3*x^2+2*x^3+6*x^2";
var newString1 = string1.replace(/(\d\*x\^(\d))\+(\d\*x\^(\d))/g, function (piece, $1, $2, $3, $4) {
    if ($2 > $4) {
        return $3 + "+" + $1;
    } else {
        return piece;
    }
});

或者,如果你知道一个更好的工具来解决这个问题而不是regexp,就像评论中提到的那样,请使用该工具提供解决方案。

1 个答案:

答案 0 :(得分:0)

下面的代码片段只使用拆分,反向,连接 它命令' +'基于反转件。
因此,通过指数对它们进行排序。

例如3*x^2+2*x^3+6*x^2变为3*x^2+6*x^2+2*x^3



var str = "3*x^2+2*x^3+6*x^2";

var result = str
      .split('').reverse().join('')  // reverse the string
      .split('+')                    // split into an array by the +
      .sort().reverse()              // sort the array descending
      .join('+')                     // join the array by + to a string
      .split('').reverse().join(''); // reverse the string
      
console.log(result);




至于如何使用正则表达式来获取每件作品和之后的作品?
这可以通过具有捕获组的正向前瞻来完成。



var str = "3*x^2+2*x^3+6*x^2";
var re = /(\d\*x\^(\d))(?=\+?(\d\*x\^(\d))?)/g;
var m;
while (m = re.exec(str)) {
  console.log(m[1], "exponent:"+m[2], m[3], "exponent:"+m[4]);
}