我正在努力解析一个类似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",%%
答案 0 :(得分:2)
所以,像
\"publicProfileUrl\":\"(.*?)\",
应该有效。
如果你想绝对安全:
正如其他人所指出的那样,这并不总是“不漏水”。在您当前的应用程序(网址!)中,它可能不是问题,但在一般情况下,我们可能会遇到一个转义"
,后面跟一个逗号,就像"this is \"it\", no doubt!"
一样,它应该属于我们的目标字符串到目前为止,这种模式会导致我们的目标字符串过早结束。如果我们通过在搜索组中添加[^\\]
来稍微修改正则表达式,那么即使这个讨厌的小模式也不会对我们造成任何伤害:
\"publicProfileUrl\":"(.*?[^\\])\",
答案 1 :(得分:1)
对于组匹配,添加?
意味着尽可能少
\"publicProfileUrl\":\"(.*?)\",
答案 2 :(得分:1)
尝试排除捕获中的结束双引号:
\"publicProfileUrl\":\"([^"]*)\",
通常情况下,换行符会解决贪心匹配问题