2016-09-27 40 views
-3

只能在字符串中的特定位置刪除方括號纔可以刪除方括號?我有以下字符串:JavaScript - 只在特定位置刪除方括號的正則表達式

[{ 
    "text": "Text123", 
    "data": [{ 
     "status": "Pending", 
     "validity": "Invalid" 
    }], 
    "children": [{ 
     "text": "Text456", 
     "data": [{ 
      "status": "Pending", 
      "validity": "Invalid" 
     }] 
    }] 
}] 

我需要從數據數組中刪除方括號但將它們保留在其他地方。結果字符串應該是:

[{ 
    "text": "Text123", 
    "data": { 
     "status": "Active", 
     "validity": "Inactive" 
    }, 
    "children": [{ 
     "text": "Text456", 
     "data": { 
      "status": "Pending", 
      "validity": "Valid" 
     } 
    }] 
}] 

是否可以用正則表達式來完成此操作? 謝謝!

+2

爲什麼在世界上你會嘗試串ma有效的json數據?只要閱讀'data'數組中的第一個元素,如果你有興趣的話! – Jamiec

+2

爲什麼通過正則表達式來做到這一點?它實際上可以作爲一個對象正常處理。 – vlaz

回答

1

雖然我覺得這個問題有點討厭,但可能你有這樣的需求。反正這裏是正則表達式:

/"data": \[([^\]]*)\]/g 

然後通過更換:

"data": $1 

其中\ 1是捕獲組

+2

JavaScript將使用'$ 1'來引用第一個捕獲組。另外,你內部有一個'.',我認爲它根本不需要。 – vlaz

+0

@vlaz是的,它會沒有那個點。我沒有看到JavaScript的第一位。編輯。 –

+0

謝謝Maverick_Mrt!是的,我知道這有點奇怪的問題 - 這是一個節點深度未知的樹結構。每個內部節點也可以容納數據數組。解析樹的每個級別並執行data = data [0]似乎是一個糟糕的選擇。正則表達式完美。做一些小的修改:str.replace(/「data」:\ [([^ \]] *)\]/g,「\」data \「:$ 1」)。再次感謝正則表達式! – Koshera

1

你可以只解析JSON成一個對象,而不是必須處理正則表達式/字符串。

data = data[0] 
+0

'使用JSON作爲JSON'好吧,你不是。您正在操作示例中的_objects_。 JSON是文本數據,用JavaScript中的字符串表示。要用_actual_ JSON來做你想做的事情,你需要首先執行'JSON.parse(data)'。 – vlaz

+0

@vlaz你明白我的意思。 – Shadetheartist

+0

我這樣做,我認爲現在是停止誤會__ __ __ _ _ _ _ _ _ _ _ _ __ __的時候了。這兩者是不同的,將它們稱爲它們是一個非常新手的錯誤。這很類似於Java和JavaScript混淆 - 沒關係,我們都可以在開始時犯這個錯誤,但是一旦達到了某種程度的知識,也就是兩者之間的差異,那麼現在是時候停止犯錯了。 – vlaz