【问题标题】:How to parse Json using Regex?如何使用正则表达式解析 Json?
【发布时间】:2013-07-08 06:01:08
【问题描述】:

我想用正则表达式解析这个 json 数据。但是,我做不到。 我试过这样module.getid(.*),但没有用。

只是,我想参加这个部分-> module.getid(...)

module.getid([{"id":"44423"}]); module.getresult([{"result":"false"}]);

我该怎么做?

【问题讨论】:

  • 自从it's not a regular language 以来,您无法使用正则表达式解析 json - 为什么要使用正则表达式而不是 JSON.parse
  • 我相信OP想从他提供的样本中提取[{"id":"44423"}]。无论如何,no working是相当模糊的......

标签: regex json parsing regular-language


【解决方案1】:

如果您想捕获第一个 (demo),请尝试此操作:

/module.getid\((.*?)\); *module.getresult(?:.*?)\);$/m

如果你想同时捕获 json 字符串 (demo):

/module.getid\((.*?)\); *module.getresult(.*?)\);$/m

【讨论】:

  • 谢谢,这是一个非常干净和简单的解决方案。还有其他方法吗?
  • 只匹配 ID 的值怎么样?例如,假设我们有这个:module.getid([{"id":"44423", "code":"mod_editor"}]);。在本例中,我将如何使用单个正则表达式返回 44423
【解决方案2】:

好吧,从你给我们的那个新字符串开始工作:

module.getid([{"id":"44423", "code":"mod_editor"}]);

这是一个正则表达式,可以很好地划分所提供行中的所有数据

m/module\x2egetid\x28\x5b\x7b\x22(?<key1>[^\x22]+)\x22\x3a\x22(?<value1>\d+)\x22\x2c\s+\x22(?<key2>[^\x22]+)\x22\x3a\x22(?<value2>[^\x22]+)\x22/

您可以使用命名的捕获或捕获的编号来引用这些字段,无论您喜欢哪个。

在这种情况下,仅返回此字符串中为 44423 的数据部分,您可以引用捕获编号“2”或捕获名称“value1”。

我不确定您使用哪种语言来“解析”这些数据,所以我无法为您提供工作代码的实际 sn-p。

【讨论】:

  • 这可能行得通,但我还是想说 JSON.parse 方法会好很多!
  • 虽然我同意使用 JSON 解析器会是一种更好的方法,但我觉得万一有理由不使用 JSON 解析器,我会从表面上回答这个问题。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多