Javascript 想知道是否可以使用正则表达式
考虑下面的例子Javascript 想知道是否可以使用正则表达式,javascript,regex,Javascript,Regex,考虑下面的例子 <pre> { "cccccc": {}, "aaaaaa": { "xxxxxxxx": true }, "bbbbbbb": { "yyyyy": true, "zzzzzzzz": true } } </pre> { “CCCC”:{}, “AAAAA”:{ “xxxxxxxx”:正确 }, “bbbbb”:{ “yyyy”
<pre>
{
"cccccc": {},
"aaaaaa": {
"xxxxxxxx": true
},
"bbbbbbb": {
"yyyyy": true,
"zzzzzzzz": true
}
}
</pre>
{
“CCCC”:{},
“AAAAA”:{
“xxxxxxxx”:正确
},
“bbbbb”:{
“yyyy”:对,
“zzzzzz”:正确
}
}
我可以选择x、y和z,并为它们指定动作功能
[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{(.*)}
re=/”(*?(:(真|假))/g
hl=“$1$2”;
s=s.更换(re,hl)
但是我没有弄清楚如何根据它在第一个动作参数中的位置来正则表达式
aaaaaa
或bbbbbbb
,该参数现在固定为aaaaaa
,对于y或z您可以在两步正则表达式中执行此操作,如果您愿意的话:
[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*(?:true|false)
奇数匹配是您的键,偶数匹配是您的值。您需要在偶数匹配上运行辅助正则表达式以查找所有值,例如:
[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{((?:[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{(.*)})*)}
它应该提取您的所有值
编辑:
仅用一个正则表达式无法实现这一点,原因如下:如果在引号中捕获每个变量,最终将捕获6个:
'“
字符的捕获来实现这一点。然后,您可以假设内容捕获之前的每个变量都是包含变量,内容捕获之后的每个变量都是包含变量;直到下一个包含变量
当然,除了创建大量额外的工作之外,正如我所链接的,这在JavaScript正则表达式中目前是不可能的。因此,我将回到我最初的回答:为了避免正则表达式而支持编程解决方案,
JSON.parse
或类似的正则表达式应该总是首选,因为正则表达式很脆弱。您正在寻找JSON.parse
,不是正则表达式。事实上,我生成了如下文本界面:)我认为从JSON对象开始,以另一种方式生成一个交互式漂亮的打印要做更多的工作?@GertCuykens:不,我可以向您保证使用脆弱的(正则表达式)文本替换将比简单的编程创建更为复杂。鉴于JSON不是一种常规语言,至少没有通用的解决方案。@GertCuykens我觉得很沮丧,因为你收到了大量反对票,“想知道是否可以使用正则表达式。”这些否决票可能是在宣布试图使用正则表达式解析此输入的愚蠢行为。我同意这种看法,但我不同意这种基于这种看法的否决票。有一个+1来抵消。对不起,我没有投反对票,其他人投了。我感谢你的帮助,PS我只能用s.replace做一个正则表达式,我认为,使用第二个替换将使其更加复杂。@Downvoter一些关于downvote原因的澄清将非常有帮助。@GertCuykens不幸的是,如果您只需要在一个正则表达式中完成,这在JavaScript中是不可能的。我已经编辑了我的答案,解释了为什么你必须使用两个正则表达式。谢谢你,接受了答案并投了赞成票,试图补偿匿名的反对票
[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{((?:[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{(.*)})*)}