2016-11-09 97 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

相关问题