Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript上的正则表达式在类似JSON的字符串上解析key:value对?_Javascript_Json_Regex_String_Parsing - Fatal编程技术网

如何使用JavaScript上的正则表达式在类似JSON的字符串上解析key:value对?

如何使用JavaScript上的正则表达式在类似JSON的字符串上解析key:value对?,javascript,json,regex,string,parsing,Javascript,Json,Regex,String,Parsing,我正在努力解析类似JSON的字符串中的键:值对。我知道人们会自动地说“使用JSON.parse()”,我完全同意。问题是我不是在处理JSON字符串,而是处理类似JSON的字符串 至少我用JSON.parse解析这些字符串的尝试失败了(我已尝试清理字符串,以便JSON.parse不会抱怨格式错误的字符串) 我遇到的问题是,类似JSON的字符串有时会被截断,而另一些时候则不会。可以保证的是,键publicProfileUrl将始终在文本中(或者至少与观察结果一致),我需要解析它的值: 例如,这是字符

我正在努力解析类似JSON的字符串中的键:值对。我知道人们会自动地说“使用
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\":\"(.*?)\",

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

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

\"publicProfileUrl\":\"(.*?)\",
应该有用

如果你想绝对安全:

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

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

\"publicProfileUrl\":\"(.*?)\",
应该有用

如果你想绝对安全:

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

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

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

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

通常,换行符可以解决贪婪匹配的问题

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

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

通常,换行符会绕过贪婪匹配

使您的匹配“非贪婪”。看这里,让你的对手“不贪婪”。看这里,尽管其他人有相同的答案,但还是很棒。我之所以选择你的答案,是因为你写了
的意思,尽管其他人有相同的答案。我之所以选择你的,是因为你写了
的意思是什么?如果你碰巧有一个(双重?)转义
,使用非贪婪修饰符
会更好,但如果你碰巧有一个(双重?)转义
,使用非贪婪修饰符
会更好。”
在您的价值中