var s = '八十七加三十二减四十三加二十四减十五减三十加三减二'; function fn(str){ let add = [] let sub = [] let num = [] let len = str.length let tmp = 0 while(tmp<len){ tmp = str.indexOf('加',tmp) if(tmp === -1){ break; } add.push(tmp); tmp++ } while(tmp<len){ tmp = str.indexOf('减',tmp) if(tmp === -1){ break; } sub.push(tmp); tmp++ } str = str.replace(/加/g,',') str = str.replace(/减/g,',') num = str.split(',') for(let i =0;i<num.length;i++){ if(num[i].length == 1) { switch(num[i]){ case '零': num[i]=0; break; case '一': num[i]=1; break; case '二': num[i]=2; break; case '三': num[i]=3; break; case '四': num[i]=4; break; case '五': num[i]=5; break; case '六': num[i]=6; break; case '七': num[i]=7; break; case '八': num[i]=8; break; case '九': num[i]=9; break; case '十': num[i]=10; break; } } else if(num[i].length == 2) { if(num[i][0]== '十'){ switch(num[i][1]){ case '一': num[i]=11; break; case '二': num[i]=12; break; case '三': num[i]=13; break; case '四': num[i]=14; break; case '五': num[i]=15; break; case '六': num[i]=16; break; case '七': num[i]=17; break; case '八': num[i]=18; break; case '九': num[i]=19; break; } } else{ switch(num[i][0]){ case '二': num[i]=20; break; case '三': num[i]=30; break; case '四': num[i]=40; break; case '五': num[i]=50; break; case '六': num[i]=60; break; case '七': num[i]=70; break; case '八': num[i]=80; break; case '九': num[i]=90; break; } } } else{ switch(num[i][0]){ case '二': num[i] = num[i].replace('二','2'); break; case '三': num[i] = num[i].replace('三','3'); break; case '四': num[i] = num[i].replace('四','4'); break; case '五': num[i] = num[i].replace('五','5'); break; case '六': num[i] = num[i].replace('六','6'); break; case '七': num[i] = num[i].replace('七','7'); break; case '八': num[i] = num[i].replace('八','8'); break; case '九': num[i] = num[i].replace('九','9'); break; } switch(num[i][2]){ case '一': num[i] = num[i][0] * 10 + 1 break; case '二': num[i] = num[i][0] * 10 + 2 break; case '三': num[i] = num[i][0] * 10 + 3 break; case '四': num[i] = num[i][0] * 10 + 4 break; case '五': num[i] = num[i][0] * 10 + 5 break; case '六': num[i] = num[i][0] * 10 + 6 break; case '七': num[i] = num[i][0] * 10 + 7 break; case '八': num[i] = num[i][0] * 10 + 8 break; case '九': num[i] = num[i][0] * 10 + 9 break; } } } str = '' for(let j=0;j<num.length;j++) { str += num[j] if(add.length <= sub.length){ if(add[0]<sub[0]) { str += '+' add.shift() } else { str += '-' sub.shift() } }else{ if(add[0]>sub[0]) { str += '-' sub.shift() } else { str += '+' add.shift() } } } str = str.slice(0,str.length-1) return eval(str) } console.log(fn(s))