我想使用正则表达式搜索来匹配包含名称/值对的无效 JSON,其中名称不在引号中。例子:
无效(我正在尝试匹配):
{name:"value"}
有效(我会修复它们看起来像这样):
{"name":"value"}
我可以使用什么 RegEx 来最好地匹配不包含 "" 双引号的对象键?(单引号可以匹配,因为无论如何我都想将它们转换为双引号)。
一般来说,在正则表达式中,当您想表明not
您使用该^
字符时。例如,在示例中,匹配引号以外的任何内容的正则表达式字符串如下所示:
r'\{[ \t]+[^\"]*[a-zA-Z]+[^\"][ \t]+:'
当然,这在许多情况下可能会失败,因为正则表达式不是解决这个问题的正确选择。您应该尝试解析它并在它不起作用时抛出错误。在蟒蛇中:
import json
try:
json.loads(attempt)
except ValueError:
print "INVALID JSON"
raise
需要解析 JSON,以正确确定它是否有效。您可以使用jison json 解析器示例,并更改规则以说明您的其他有效 JSON 案例。但是,如果从键中删除引号要求,解析 JSON blob 会变得非常困难。
我建议您保持语法不变,并添加一些错误处理规则(不幸的是 alpha 支持)。这是一个复杂的问题,所以在深入研究之前花点时间研究一下,你会好很多。
just replace \{\s*(?!(\"|\'))(\w*[a-zA-Z]\w*)(?!(\"|\'))\s*:(.+)
with {"$2" :$4
and you will get no variable will be without ' or " :)
好吧,这对我有用,因为我需要匹配可以传递有效 javascript 变量名的字符串,并在两边允许单引号(我还允许在两边留出空格)。
\{+( |')?+[a-zA-Z0-9_]*+( |')?+:
我仍在围绕正则表达式进行思考,但我的理解是,这个表达式将匹配...的字符串
然而,这最终也匹配了各种 CSS、jQuery 函数和其他非 JSON 字符串(至少不是我正在寻找的真正的 JSON 响应)......例如,{display:none}
和$(...).animate({'height':'200px'})
. 结果太多,无法用于我的目的。呃,好吧!