从文本文件

时间:2017-11-16 21:10:36

标签: javascript json regex

我有一个文件的内容格式如下:

{
  "title": "This is a test }",
  "date": "2017-11-16T20:47:16+00:00"
}

This is a test }

我想通过正则表达式提取JSON标题(我认为这是最合理的方法)。但是,将来JSON可能会发生变化(例如,它可能会添加额外的字段,或者当前字段可能会更改),因此我希望保持正则表达式的灵活性。我尝试使用建议的here解决方案,但对于我的用例来说似乎有点过于简单:实际上,上面的"技巧"正则表达式,如this regex101.com example所示。

由于我对正则表达式的了解并不那么先进,所以我想知道是否有正则表达式方法能够涵盖我的用例。

谢谢!

2 个答案:

答案 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)
})