2016-09-27 52 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