2011-04-06 180 views
1

我有一个包含元素列表的字符串,其中一些元素是固定的,其中一些元素是可选的。举个例子,让我们说我的字符串是一个购物清单:将字符串拆分为多个字符串组

"strawberry, raspberry, $2{tomato, sauerkraut, beans}, 
potato, $1{{apple, pear}, {orange, banana}}" 

而且我想的东西,如落得:

["strawberry", 
"raspberry", 
[2, "tomato", "sauerkraut", "beans"], 
"potato", 
[1, ["apple", "pear"], ["orange", "banana"]] 

我不知道我怎么可以在这里解决了多种选择,从而我愿意接受任何和所有建议。您也可以修改“语法”(例如"$[num of coices]{list}")并添加/删除绒毛,这并不重要。漂亮者更简单! :]

编辑:我在上面的格式,并用手将它们转换这些列表的bazillions是不是一种选择,除非有没有其他解决办法... :(

感谢

+0

将是可爱与真实生活中的例子,它是用来做什么和在字符串来自 – mplungjan 2011-04-06 12:48:58

+0

它是自动化字辈的,如果他们一个游戏,玩家可以选择(例如)去军校或平民学院。根据他们选择哪条路径(以及其他一些东西),有许多可能的结果,每个都会发出固定奖励和一堆“从中挑选X”类型。 这些奖励现在几乎存储在一个字符串中。我希望能够以某种方式将它们分开,因为重做它们是主要的皮塔饼。 – Kenny 2011-04-06 12:56:48

回答

4

为什么! “T你使用JSON这个

var list = ["strawberry", 
    "raspberry", 
    [2, "tomato", "sauerkraut", "beans"], 
    "potato", 
    [1, ["apple", "pear"], ["orange", "banana"]]]; 

var str = JSON.stringify(list); 
/* 
str = '["strawberry","raspberry",[2,"tomato","sauerkraut","beans"],"potato",[1,["apple","pear"],["orange","banana"]]]' 
*/ 

var list2 = JSON.parse(str); 
/* 
list2 = ["strawberry", 
     "raspberry", 
     [2,"tomato","sauerkraut","beans"], 
     "potato", 
     [1, ["apple","pear"], ["orange","banana"]]] 
*/ 
+0

也可以使用jQuery [$ .parseJSON](http://api.jquery.com/jQuery.parseJSON/) - [测试用例](http://jsfiddle.net/yahavbr/GBFKJ/) – 2011-04-06 12:56:11

+0

谢谢,但我忘了要提到我有成千上万的这些列表,并且用手转换它们是我想避免的。 – Kenny 2011-04-06 13:00:57

+0

@Kenny:你的问题说'你也可以修改'语法'' - 而JSON是***标准格式的序列化JavaScript对象。 – 2011-04-06 13:02:52

1

第一:?我使用是由Matt提到JSON基础的解决方案强烈建议 但出于某种原因,你无法适应的,你的当前密码,然后试试这个: 注:我没有测试它针对不同的测试案例,但我认为这会给你的想法...

var testString = "strawberry, raspberry, $2{tomato, sauerkraut, beans}, potato, $1{{apple, pear}, {orange, banana}}"; 
    testString = testString.replace(/\$(\d+){/g, "{$1,"); 
    testString = testString.replace(/{/g, "[").replace(/}/g, "]"); 
    testString = testString.replace(/\b/g,'"') 
    testString = testString.replace(/(")(\[)/g,'$2$1') 
    testString = testString.replace(/(\])(")/g,'$2$1') 
    testString = '[' + testString + ']'; 
    var obj = JSON.parse(testString); 
    for(var o in obj) 
    { 
     alert(typeof obj[o]); 
    } 

工作实例:http://jsfiddle.net/PcMhw/4/

+0

谢谢!这正是我所需要的,就像魅力一样!亲爱的先生(或女士),你简直太棒了。 – Kenny 2011-04-06 14:56:37

+0

对我很好。我会拿这个代码,并用它来把数据转换成JSON ***尽快***。 – 2011-04-06 14:57:48

+0

@Kenny:但请注意,字符串中的数据可以很容易地破坏上面的代码。就像strwawberry(草莓)中的空间一样。当然,您可以增强代码以使其处理这些场景,但当您识别更多测试用例时,它会变得更加复杂。这就是为什么我倾向于基于JSON的解决方案。只是想确保你了解风险。 – Chandu 2011-04-06 14:58:25