2

我目前正在处理一项输入将来自文本文件的任务。我遇到的问题是弄清楚如何收集输入但仍将其分解并确保我拥有所有相关数据。

输入是:

输入 1: 1 本书 12.49 1 音乐 CD 14.99 1 巧克力棒 0.85

输入 2:10.00 进口巧克力 1 盒 47.50 进口香水 1 瓶

输入3:1瓶进口香水27.99 1瓶香水18.99 1包头痛药9.75 1盒进口巧克力11.25

我需要保留第一个数字,是否进口,名称(即香水瓶)和价格。任何建议都会很可爱我确定正则表达式是答案,但我不太确定如何制作它,以便如果出现导入​​,其余部分仍然会被读取。

4

1 回答 1

0

好吧,您可以自己做,也可以懒惰并使用以下代码:

var string = "1 book at 12.49 1 music CD at 14.99 1 chocolate bar at 0.85";

var data = getArray(string);

console.debug(data);

function getArray(string){
    //prepare the string
    //adding terminators (";")
    string = string.replace(/(at) ([0-9]*).([0-9]*)/g,"$1 $2.$3;");
    string = string.replace(/; /g,";"); //remove whitespace after terminators
    string = string.substring(0,string.length-1); //remove last terminator

    var split = string.split(";"); //split it up
    var data = new Array();

    //loop through objects
    for(var i=0;i<split.length;i++){
        data[i] = new Array();

        var subData = split[i].split(" ");

        data[i]['count'] = subData[0]; //0 is count
        data[i]['price'] = subData[subData.length-1]; //last is price
        data[i]['article'] = "";
        for(var j=1;j<subData.length-2;j++){ //in between is the name (minus the "at")
            data[i]['article'] += subData[j] + " ";
        }
    }

    return data //and done
}

jsFiddle:http: //jsfiddle.net/3sNBJ/1/

...我敢打赌会有更好的解决方案,但我对正则表达式也不是很好...

[编辑] ...哦,导入也是需要的值...嗯,http://jsfiddle.net/3sNBJ/3/

[edit2] ...现在使用 ui:http: //jsfiddle.net/3sNBJ/5/

于 2013-09-17T09:28:55.177 回答