0

我试图从页面上的脚本块中解析出 JavaScript 对象文字。这是我的数据示例:

//End Update for CASE00370003 2011/08/22
stores[0] = {
'fullName' : 'Bobs Commons',
'street1' : '23 Chestnut Commons Dr'
};
//Some more comments
stores[1] = {
'fullName' : 'Gove Wood',
'street1' : '65 Lake Rd'
};

到目前为止,我想出了:

/^(stores\[)(\d){1,2}(])(.|\n)*};$/m

但是,字符串以“};”结尾 将抓取最后一次出现的 }; 在商店 [1] 上,因此每个都不会单独损坏。谢谢!

4

3 回答 3

0

似乎您需要的是“非贪婪”匹配(*?而不是*)-它捕获最短的匹配而不是最长的匹配。所以正则表达式看起来像:

/^(stores\[)(\d){1,2}(])(.|\n)*?};$/m

在建议我仍然必须注意,您通常根本不应该使用正则表达式来做到这一点:)。如果对象字符串属性包含“}”(例如,“fullName”:“Bobs Comm}ons”),您的方法将中断。

于 2013-08-14T01:10:52.443 回答
0

除了上面的@amakhrov 答案:

您可以连续搜索右花括号,除非JSON.parse(literal_string);无例外地执行

UPD:错过了一个重要的事实,那就是它需要是一个有效的 JSON

于 2013-08-14T01:13:10.380 回答
-2

准备好让你大吃一惊。

JSON(几个答案都提到过)--->

Java脚本对象注解。_ _ _

很酷,对吧?由于 JS 的声明语法非常有用,它成为了一种中性的数据格式。这就是您的 Web 请求返回的格式,JavaScript 甚至有专门的库来解析它。我想你可能只是在这方面不清楚。

于 2013-08-14T01:53:29.673 回答