我需要使用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字符串
答案 0 :(得分:0)
好的,你的"输入"面值:
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
答案 1 :(得分:0)
我找到了另一个解决方案或kludge
{(?<={).*(?=})}
获取第一个和最后一个花括号及其间的所有内容。
这当然并不意味着匹配的字符串符合JSON并且可以返回
{&#34; a&#34;:&#34; 1&#34;,&#34; b&#34;。&#34; 2&#34;}这里有一些垃圾{&#34; c&# 34;:&#34; 1&#34;&#34; d&#34;&#34; 2&#34;}
作为一个字符串。但我知道我的来源,我相信它会得到复杂的JSON
我更喜欢Liam的解决方案,但绝望的解决方案有时也会起作用。
答案 2 :(得分:0)
我可以看到我提供的样本非常基本,但@Liam的答案非常适合它,并教会我如何开始。
我找到了一个更强大的JSON示例,包括括号中的数组,电子邮件地址等,所以我将他的解决方案扩展到:
/{[{}\[\]\w\!@#\$%\^\&*\)\(+=._":@\?\-\s,]*}/g
我寻找更多特殊字符。我意识到它是不完整的,因此需要注意。
答案 3 :(得分:0)
好的,这里很遗憾。我最初的问题是过度和过度思考。
提供的答案(没有我提供适当的背景)是正确的。
但这更简单,特别是如果您确信JSON之类的字符串已正确生成或可以正确验证。
{.*}
请参阅此处示例中的测试字符串