2013-03-03 91 views
1

我試圖建立一個快速的JavaScript函數,將收到一個JavaScript對象是這樣的:正則表達式和嵌套方括號來單獨亞

{ 
    "sample[one]": "value 1", 
    "sample[hard][damn_you[0]]": "this 1", 
    "sample[hard][damn_you[1]]": "this 2" 
} 

並將它轉換爲是這樣的:

{ 
    "[sample][one]": "value 1", 
    "[sample][hard][damn_you][0]": "this 1", 
    "[sample][hard][damn_you][1]": "this 2" 
} 

微妙但很大的差異。我已經完成了第一部分,其中涉及將方塊的第一部分包裝在方括號中,但是當要取出嵌套方括號並將其排除時,我不知所措。我一直在嘗試一段時間沒有成功。這是我到目前爲止有:

var data = { 
     "sample[one]": "value 1", 
     "sample[hard][damn_you[0]]": "this 1", 
     "sample[hard][damn_you[1]]": "this 2" 
    }, 
    subset = /^([a-z0-9-_]+?)\[/i; 

for (var key in data) { 
    if (subset.test(key)) { 
     data[key.replace(subset,'[$1][')] = data[key]; 
    } else { 
     data[key.replace(/^(.+)$/,'[$1]')] = data[key]; 
    } 
    delete data[key]; 
} 

它輸出這樣的:

{ 
    "[sample][one]": "value 1", 
    "[sample][hard][damn_you[0]]": "this 1", 
    "[sample][hard][damn_you[1]]": "this 2" 
} 

但很茫然,當涉及到提取這些嵌套方括號。有任何想法嗎?

+2

正則表達式和「嵌套」通常是一個不好的組合... – elclanrs 2013-03-03 23:43:01

+0

我同意。你會推薦什麼選擇?試圖找到另一種方式時,我很茫然。任何建議將不勝感激! – 2013-03-04 02:28:04

回答

2

本質上,您正在尋找每個連續的不是方括號的字符集。不要緊,什麼樣的順序支架均所以,你可以很容易地做這樣的事情:

key = "[" 
    +key.replace(/]/g,'[') // replace close brackets with open ones 
          // (to make them the same symbol) 
    .replace(/\[+$/,'') // trim off brackets at the end of the string 
    .replace(/\[+/g,"][") // replace brackets with "][" (separating the words) 
    +"]"; 

因此,例如sample[hard][damn_you[0]]會經過以下步驟:

  • sample[hard][damn_you[0]]
  • sample[hard[[damn_you[0[[
  • sample[hard[[damn_you[0
  • [sample][hard][damn_you][0]
+0

這樣一個簡單的方法。確實,最難的問題往往有最簡單的解決方案。非常感謝! – 2013-03-04 02:31:39