2013-06-11 29 views
0

我試圖在數學運算符上拆分數學字符串。例如在Javascript中分割運算符的數學表達式

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

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

我想在這裏尋找解決方案,這就是我得到

String1=String.split("(?<=[-+*/])|(?=[-+*/]"),但看起來這是不是取了String1中所期望的結果。

+0

是不是缺少'「6」,「3」' – epascarello

+1

之間的'+'? –

+2

'String1'是一種輸入還是所需的輸出? – JJJ

回答

5

jsfiddle

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); 
+0

過濾器方法doesn'在IE 8或更低版本下工作,僅供參考。 –

+0

我想在運營商只拆分,這不會給正確的結果,我有十進制數字或多個數字號碼。例如:7.5 * 32 + 2-6.97 – min2bro

+0

@ min2bro - 首先你沒有提到這一點,第二,這是所有的方式減去正則表達式來獲得浮動。 – Gabe

2

編輯:

這就像接受的答案,並作爲獎金在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/

+0

您的解決方案非常優雅,但您和接受的答案都有錯誤。下面的表達式'5 + -1'返回'['5','+ - ','1']',這沒有多大意義。儘管如此,您仍然得到我的upvote;) –

0

首先,如果你想使用正則表達式與split()你必須首先創建它:

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

可悲的是,在大多數瀏覽器的正則表達式引擎不支持lookbehinds,所以它不會工作無論如何。你必須在循環中做到這一點。

相關問題