【问题标题】:How can I find Json data inside other strings?如何在其他字符串中找到 Json 数据?
【发布时间】:2018-06-15 09:09:03
【问题描述】:

我需要使用 JavaScript 分析一个字符串,以确定它是否在其中的任何位置包含一些 JSON。

我有一个适用于 RegEx 101 和 PHP 的模式:

$pattern = '
/
\{              # { character
(?:         # non-capturing group
        [^{}]   # anything that is not a { or }
        |       # OR
        (?R)    # recurses the entire pattern
    )*          # previous group zero or more times
\}              # } character
/x
';

preg_match_all($pattern, $text, $matches);
print_r($matches[0]);

但是,我正在努力将其转换为 JavaScript。这是我目前所拥有的:

 var txt = draft.content. // gets a long text string
 jsontest = txt.match(/\{(?:[^{}]|(?R))*\}/xg);

但这会得到一个错误提示:

正则表达式中的无效字符 (?

任何人都可以建议修改该正则表达式模式吗?或者有另一种不需要正则表达式的 JavaScript 方法吗?

这是输入:

 New test nested braces

 {
 "employee":{ "name":"John", "age":30, "city":"New York" },
 "location":{"street":"100 Main","City":"Houston","Zip":"77001"}
 }

 And other text that is not part of the string I need 

输出应该是json字符串

【问题讨论】:

标签: javascript json regex


【解决方案1】:

好吧,从表面上看你的“输入”:

New test nested braces

 {
 "employee":{ "name":"John", "age":30, "city":"New York" },
 "location":{"street":"100 Main","City":"Houston","Zip":"77001"}
 }

 And other text that is not part of the string I need 

这个正则表达式会匹配你想要的

/{[{}\w\":\s,]*}/g

https://regexr.com/3iqvb

【讨论】:

  • 它工作得很好。非常感谢。我的示例很简单,但可以说明 JSON 字符串可能与其他文本一起出现。其他文本具有实用性,但我的 iOS 应用程序仅限于一个输入。我确实对答案投了赞成票,但我没有足够的分数来推动公众针。
  • 不确定你的意思@user8960345 或许读过这个meta.stackexchange.com/questions/5234/…
  • 我检查了箭头。你可以看到我是多么的新手。感谢您指向我的链接。
【解决方案2】:

我找到了另一个解决方案或组合

 {(?<={).*(?=})}

获取第一个和最后一个花括号以及它们之间的所有内容。

这当然并不意味着匹配的字符串是 JSON 兼容的,它可以返回

{"a":"1","b"."2"} 这里有些垃圾{"c":"1","d"."2"}

作为一个字符串。但我知道我的来源,并且相信它会得到复杂的 JSON

我更喜欢 Liam 的解决方案,但绝望的解决方案有时也有效。

https://regex101.com/r/DKzfuS/1

【讨论】:

    【解决方案3】:

    我可以看到我提供的示例非常基本,但@Liam 的回答非常适合它并教会了我如何开始。

    我发现了一个更健壮的 JSON 示例,包括括号中的数组、电子邮件地址等,因此我将他的解决方案扩展为:

     /{[{}\[\]\w\!@#\$%\^\&*\)\(+=._":@\?\-\s,]*}/g
    

    我寻找更多特殊字符。我意识到它是不完整的,所以请谨慎购买。

    https://regex101.com/r/xzgpwe/4

    【讨论】:

      【解决方案4】:

      好吧 newby 耻辱在这里。我最初的问题是过度思考和过度思考。

      提供的答案(我没有提供适当的上下文)是正确的。

      但这更简单,特别是如果您确信类似 JSON 的字符串已正确生成或可以正确验证。

       {.*}
      

      在此处查看示例中的测试字符串

      https://regex101.com/r/37AUap/1/

      【讨论】:

        猜你喜欢
        • 2012-07-23
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 2017-11-05
        相关资源
        最近更新 更多