2016-09-28 27 views
0

我有以下字符串使用Javascript - 字符串分割

str = "11122+3434" 

我想把它分成[ “11122”, “+”, “3434”。可以有以下的分隔符+, - ,/,*

我曾尝试以下

strArr = str.split(/[+,-,*,/]/g) 

,但我得到

strArr = [11122, 3434] 
+0

可以有不同的分隔符或者可以有一个你要分割只有数学表达式或其他任何一个时间 –

+0

? – Pankaj

+0

一次只能有一个分隔符。我想只分割数学表达式 – Neeraj

回答

4

分隔符的东西,分开数据。因此,.split()方法旨在删除分隔符,因为分隔符不是数据,因此它们根本不重要。

就你而言,两个值之间的东西也是数据。所以它不是一个分隔符,它是一个运算符(实际上,这就是它在数学中所称的)。

为此,您需要解析数据而不是拆分数据。因此,造成这种情况的最好的事情是正则表达式:

var result = str.match(/(\d+)([+,-,*,/])(\d+)/); 

返回数组:

["11122+3434", "11122", "+", "3434"] 

所以,你的价值观会result[1]result[2]result[3]

1

嗯,一种方法是首先添加一个空格作为分隔符。

// yes,it will be better to use regex for this too 
str = str.replace("+", " + "); 

再拆EM

strArr = str.split(" "); 

,它会在支架+回报您的阵列

["11122", "+", "3434"] 
1

- *需要逃避,所以

strArr = str.split(/[\+\-\*/]/g) 
+0

这不会给你符号。 –

2

这应该帮助。 ..

str = '11122+3434+12323*56767' 
 
strArr = str.replace(/[+,-,*,/]/g, ' $& ').split(/ /g) 
 
console.log(strArr)

0

var str = "11122+77-3434"; 
 

 
function getExpression(str) { 
 
    var temp = str.split(''); 
 
    var part = ''; 
 
    var result = [] 
 
    for (var i = 0; i < temp.length; i++) { 
 
    if (temp[i].match(/\d/) && part.match(/\d/g)) { 
 
     part += temp[i]; 
 
    } else { 
 
     result.push(part); 
 
     part = temp[i] 
 
    } 
 
    if (i === temp.length - 1) { //last item 
 
     result.push(part); 
 
     part = ''; 
 
    } 
 
    } 
 
    return result; 
 
} 
 
console.log(getExpression(str))