拆分运算符上的数学表达式,并将运算符包含在输出数组中



我正在尝试拆分数学运算符上的数学字符串。例如

expression = "7*6+3/2-5*6+(7-2)*5"

我需要将它标记为:

expressionArray = ["7","*","6","+","3","/","2","-","5","*","6"]

我试着在这里找到解决方案,这是我得到的

expressoinArray=expression.split("(?<=[-+*/])|(?=[-+*/]")

,但看起来这不是获取expression所需的结果

jsfield

var expression = "7.2*6+3/2-5*6+(7-2)*5";
var copy = expression;
expression = expression.replace(/[0-9]+/g, "#").replace(/[(||.)]/g, "");
var numbers = copy.split(/[^0-9.]+/);
var operators = expression.split("#").filter(function(n){return n});
var result = [];
for(i = 0; i < numbers.length; i++){
     result.push(numbers[i]);
     if (i < operators.length) result.push(operators[i]);
}
console.log(result);

EDIT:

这就像公认的答案一样,作为奖励不会因为IE8和以下版本的filter()而失败:

var expression = "7.2*6+3/2-5*6+(7-2)*5";
var splitUp = expression.match(/[^d()]+|[d.]+/g);
document.body.innerHTML = splitUp;
http://jsfiddle.net/smAPk/

首先,如果你想在split()中使用正则表达式,你必须首先创建它:

var expr = new RegExp("(?<=[-+*/])|(?=[-+*/])")  
// note: you missed a ) at the end

遗憾的是,大多数浏览器中的RegExp引擎不支持回溯,所以它无论如何都无法工作。

最新更新