假设现在有如下字符串:
str="1/1,A,0.1*1/1,B,0.2*1/2,A,0.2*1/3,B,0.2*1/4,A,0.1*1/4,B,0.1"
现在按照1/1,1/2,1/3,1/4进行分别输出如下格式(当当日没有数据时则用”-“代替):
1/1 A 0.1
1/1 B 0.2
1/2 A 0.2
1/2 B -
1/3 A -
1/3 B 0.2
1/4 A -
1/4 B 0.1
请高手指点一下
回复讨论(解决方案)
var str="1/1,A,0.1*1/1,B,0.2*1/2,A,0.2*1/3,B,0.2*1/4,A,0.1*1/4,B,0.1"; var reg=/\d\/\d.*?(?=(?:\d\/\d)|$)/g; var res=str.match(reg).sort(); var o={}; res.forEach(function(item){ var key=item.match(/\d\/\d/); if(!o[key]){ o[key]=[]; } o[key].push(item.replace(/,/g,' ')); }); var keys=Object.keys(o); keys.forEach(function(item){ if(o[item].length==1){ if(o[item][0].indexOf('A')==-1){ o[item].unshift(item+' A -'); }else{ o[item].push(item+' B -'); } } }); var arr=[]; keys.forEach(function(item){ arr.push.apply(arr,o[item]); }); console.log(arr);
没有数据的时候字符串格式是什么样子的
var str="1/1,A,0.1*1/1,B,0.2*1/2,A,0.2*1/3,B,0.2*1/4,A,0.1*1/4,B,0.1*1/5,A*1/6,B,"; var newStr=str.replace(/[A-Z,](?=\*|$)/g,function(matchStr){ return /[A-Z]/.test(matchStr)?matchStr+' -':matchStr+'-'; }); newStr=newStr.replace(/,/g,' ').replace(/\*/g,'\n'); console.log(newStr); 来源:itnose