如何使用JavaScript上的RegEx解析类似JSON的字符串上的键:值对?

时间:2017-04-01 18:59:45

标签: javascript json regex string parsing

我正在努力解析一个类似JSON的字符串中的键值对。我知道人们会自动说“#34;使用JSON.parse()!”#34;我完全同意。问题是我没有处理JSON字符串,而是处理类似JSON的字符串。

至少我尝试使用JSON.parse解析这些字符串失败了(我已经尝试清理字符串,以便JSON.parse不会抱怨格式错误的字符串)

我遇到的问题是,类似JSON的字符串有时会被截断,而其他时候却没有。保证会发生的是,密钥publicProfileUrl将一直存在于文本中(或者至少与观察结果一致),我需要解析其值:

例如,这是字符串的示例:

%%"fullName":"Eduardo Saverin",
"contactInfo":{
"publicProfileUrl":"https://sg.linkedin.com/in/saverin",
"twitterAccounts":["esaverin"],
"websites":[]},
"industry":"Internet",%%

我感兴趣的是解析publicProfileUrl的值。

这是我最近的尝试:

\"publicProfileUrl\":\"(.*)\",

但是它一直匹配到最后一个逗号(我为了格式化目的添加了换行符,但原始字符串没有任何换行符。)

这是原始字符串:

%%"fullName":"Eduardo Saverin","contactInfo":{"publicProfileUrl":"https://sg.linkedin.com/in/saverin","twitterAccounts":["esaverin"],"websites":[]},"industry":"Internet",%%

3 个答案:

答案 0 :(得分:2)

所以,像

\"publicProfileUrl\":\"(.*?)\",

应该有效。

如果你想绝对安全:

正如其他人所指出的那样,这并不总是“不漏水”。在您当前的应用程序(网址!)中,它可能不是问题,但在一般情况下,我们可能会遇到一个转义",后面跟一个逗号,就像"this is \"it\", no doubt!"一样,它应该属于我们的目标字符串到目前为止,这种模式会导致我们的目标字符串过早结束。如果我们通过在搜索组中添加[^\\]来稍微修改正则表达式,那么即使这个讨厌的小模式也不会对我们造成任何伤害:

\"publicProfileUrl\":"(.*?[^\\])\",

答案 1 :(得分:1)

对于组匹配,添加?意味着尽可能少

\"publicProfileUrl\":\"(.*?)\",

答案 2 :(得分:1)

尝试排除捕获中的结束双引号:

\"publicProfileUrl\":\"([^"]*)\",

通常情况下,换行符会解决贪心匹配问题