我有一个包含数字和不同数学运算符的字符串。如何从var str = "123+45-34";
的转换它解析这个字符串数组将字符串转换为数组和元素的数组
var arr = [123, '+', 45, '-',34];
我有一个包含数字和不同数学运算符的字符串。如何从var str = "123+45-34";
的转换它解析这个字符串数组将字符串转换为数组和元素的数组
var arr = [123, '+', 45, '-',34];
一种方法是使用正则表达式的部分尽可能地分割字符串,然后转换成数字:
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]
它看起来像要在word boundaries分割你的字符串:
var str = "123+45-34";
console.log(str.split(/\b/));
谈论简洁:) – myfunkyside
这假定数字是整数(没有小数点)。尝试“123 + 4.5-34” – user2314737
@ user2314737:确实如此。考虑到样本数据,这似乎并不是问题。 – Cerbrus
你可以使用与运算符对象不同的方法,这对于稍后计算值可能是有用的。
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));
此代码尝试遍历字符串。每个字符都被附加到一个新字符串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);
希望这有助于
@WiktorStribiżew:这个问题是不一样的。它想要以一组字符分割一个字符串。这里的标准是不同的。 – Cerbrus
相似的问题:[在JavaScript中评估字符串作为数学表达式](http://stackoverflow.com/questions/2276021/evaluating-a-string-as-a-mathematical-expression-in-javascript) – user2314737