-4

我想使用正则表达式搜索来匹配包含名称/值对的无效 JSON,其中名称不在引号中。例子:

无效(我正在尝试匹配):

{name:"value"}

有效(我会修复它们看起来像这样):

{"name":"value"}

我可以使用什么 RegEx 来最好地匹配包含 "" 双引号的对象键?(单引号可以匹配,因为无论如何我都想将它们转换为双引号)。

4

4 回答 4

2

一般来说,在正则表达式中,当您想表明not您使用该^字符时。例如,在示例中,匹配引号以外的任何内容的正则表达式字符串如下所示:

r'\{[ \t]+[^\"]*[a-zA-Z]+[^\"][ \t]+:'

当然,这在许多情况下可能会失败,因为正则表达式不是解决这个问题的正确选择。您应该尝试解析它并在它不起作用时抛出错误。在蟒蛇中:

import json

try:
    json.loads(attempt)
except ValueError:
    print "INVALID JSON"
    raise
于 2013-07-02T15:55:24.970 回答
1

需要解析 JSON,以正确确定它是否有效。您可以使用jison json 解析器示例,并更改规则以说明您的其他有效 JSON 案例。但是,如果从键中删除引号要求,解析 JSON blob 会变得非常困难。

我建议您保持语法不变,并添加一些错误处理规则(不幸的是 alpha 支持)。这是一个复杂的问题,所以在深入研究之前花点时间研究一下,你会好很多。

于 2013-07-02T16:58:59.310 回答
0

just replace \{\s*(?!(\"|\'))(\w*[a-zA-Z]\w*)(?!(\"|\'))\s*:(.+) with {"$2" :$4 and you will get no variable will be without ' or " :)

于 2013-07-02T16:50:14.133 回答
-2

好吧,这对我有用,因为我需要匹配可以传递有效 javascript 变量名的字符串,并在两边允许单引号(我还允许在两边留出空格)。

\{+( |')?+[a-zA-Z0-9_]*+( |')?+:

我仍在围绕正则表达式进行思考,但我的理解是,这个表达式将匹配...的字符串

  1. 从...开始 {
  2. 那么,可能有也可能没有空格或单引号
  3. 然后,有任意数量的字符匹配 az、AZ、0-9 或 _
  4. 那么,可能有也可能没有空格或单引号
  5. 然后,有一个:

然而,这最终也匹配了各种 CSS、jQuery 函数和其他非 JSON 字符串(至少不是我正在寻找的真正的 JSON 响应)......例如,{display:none}$(...).animate({'height':'200px'}). 结果太多,无法用于我的目的。呃,好吧!

于 2013-07-02T16:42:21.847 回答