繁体   English   中英

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

[英]How to parse key:value pair on JSON-like string with RegEx on JavaScript?

我正在努力解析类似JSON的字符串中的key:value对。 我知道人们会自动说“为此使用JSON.parse() !” 我绝对同意。 问题是我不是在处理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",%%

所以,像

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

应该管用。

如果您想绝对安全:

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

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

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

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

尝试在捕获中排除双引号:

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

通常,换行会解决贪婪匹配问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM