我有一个文件的内容格式如下:
{
"title": "This is a test }",
"date": "2017-11-16T20:47:16+00:00"
}
This is a test }
我想通过正则表达式提取JSON标题(我认为这是最合理的方法)。但是,将来JSON可能会发生变化(例如,它可能会添加额外的字段,或者当前字段可能会更改),因此我希望保持正则表达式的灵活性。我尝试使用建议的here解决方案,但对于我的用例来说似乎有点过于简单:实际上,上面的"技巧"正则表达式,如this regex101.com example所示。
由于我对正则表达式的了解并不那么先进,所以我想知道是否有正则表达式方法能够涵盖我的用例。
谢谢!
答案 0 :(得分:1)
如果JSON始终以{
在左边距处开始,以}
在右边距处结束,其他所有内容在您显示时缩进,则可以使用正则表达式
/^{.*?^}$/ms
m
修饰符使^
和$
匹配行的开头和结尾,而不是整个字符串。 s
修饰符允许.
匹配换行符。
var str = `{
"title": "This is a test }",
"date": "2017-11-16T20:47:16+00:00"
}
This is a test }
`;
var match = str.match(/^{.*?^}$/ms);
if (match) {
var data = JSON.parse(match[0]);
}
console.log(data);

答案 1 :(得分:1)
您可以检查\n}
的第一个索引以获取子字符串:
s = `{
"title": "This is a test }",
"date": "2017-11-16T20:47:16+00:00"
}
This is a test }
}`
i = s.indexOf('\n}')
if (i > 0) {
o = JSON.parse(s = s.slice(0, i + 2))
console.log(s); console.log(o)
}
或者使用RegEx缩短一点:
s = `{
"title": "This is a test }",
"date": "2017-11-16T20:47:16+00:00"
}
This is a test }
}`
s.replace(/.*?\n}/s, function(m) {
o = JSON.parse(m)
console.log(m); console.log(o)
})