2016-11-09 88 views
-1

我有一個包含數字和不同數學運算符的字符串。如何從var str = "123+45-34";的轉換它解析這個字符串數組將字符串轉換爲數組和元素的數組

var arr = [123, '+', 45, '-',34]; 
+0

@WiktorStribiżew:這個問題是不一樣的。它想要以一組字符分割一個字符串。這裏的標準是不同的。 – Cerbrus

+0

相似的問題:[在JavaScript中評估字符串作爲數學表達式](http://stackoverflow.com/questions/2276021/evaluating-a-string-as-a-mathematical-expression-in-javascript) – user2314737

回答

1

一種方法是使用正則表達式的部分儘可能地分割字符串,然後轉換成數字:

var str = "123+45-34"; 
 

 
var matches = str.match(/(\d+|\+|-|\/|\*)/g); 
 

 
console.log(matches); // ["123", "+", "45", "-", "34"] 
 

 
var asNumbers = matches.map(function(match) { 
 
    return +match || match 
 
}) 
 

 
console.log(asNumbers); // [123, "+", 45, "-", 34]

+0

感謝您的答案,你可以解釋地圖功能? – dadadodo

+0

'+ match'會將該值轉換爲一個數字,如果這不可能,則爲'NaN'。 'NaN'求值爲布爾值'false',在這種情況下,OR語句的右邊被執行。它要麼返回轉換爲數字的值,要麼返回值作爲字符串(如果無法轉換)。 – Timo

1

它看起來像要在word boundaries分割你的字符串:

var str = "123+45-34"; 
 
console.log(str.split(/\b/));

+2

談論簡潔:) – myfunkyside

+0

這假定數字是整數(沒有小數點)。嘗試「123 + 4.5-34」 – user2314737

+1

@ user2314737:確實如此。考慮到樣本數據,這似乎並不是問題。 – Cerbrus

1

你可以使用與運算符對象不同的方法,這對於稍後計算值可能是有用的。

function split(s) { 
 
    var a = s.split(''), 
 
     i = 1; 
 

 
    while (i < a.length) { 
 
     if (!(a[i - 1] in operators || a[i] in operators)) { 
 
      a[i - 1] += a.splice(i, 1)[0]; 
 
      continue; 
 
     } 
 
     i++; 
 
    } 
 
    return a.map(function (b) { 
 
     return b in operators ? b : +b; 
 
    }); 
 
} 
 
var operators = { '+': true, '-': true }, 
 
    str = "123+45-34+1e13"; 
 

 
console.log(split(str));

-2

此代碼嘗試遍歷字符串。每個字符都被附加到一個新字符串un中直到+或 - 被發現,一旦發現它們形成的字符串直到現在將被推入到新陣列中並且特殊字符或者被推入到新陣列中,並且這個過程繼續直到字符串的末尾

例如:123 +

它遍歷字符串。 first first my newString =「1」,then newString =「12」finally newString =「123」 只要找到+,它就會將newString放入newarray.now newArray中,[「123」]和'+'也應該是。推壓,現在陣列變成[ 「123」, 「+」]這個過程繼續

在這裏,我已經考慮到特殊charecters的,因爲只有+和 -

var str="123+45-34"; 
 
var newarr=[]; 
 
var newStr=""; 
 
for(var index=0;index<str.length;index++){ 
 
    
 
    if(str[index]!='+'&& str[index]!='-') 
 
    newStr+=str[index]; 
 
    else{ 
 
    newarr.push(newStr); 
 
    newarr.push(str[index]); 
 
    newStr=""; 
 
    } 
 
    
 
    } 
 
console.log(newarr);

希望這有助於

+2

這是怎麼做的?這只是一個代碼轉儲,沒有任何解釋。 – ssube

+0

我以爲代碼是自解釋的 – Geeky