2011-04-06 154 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