我的正则表达式没有找到重叠的匹配,有没有办法找到它们?
说明问题的示例正则表达式:/(\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^3
,2*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,就像评论中提到的那样,请使用该工具提供解决方案。
答案 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]);
}