Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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 想知道是否可以使用正则表达式_Javascript_Regex - Fatal编程技术网

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个:

  • 中交
  • AAAAA
  • xxxxxxxx
  • bbbbbbbb
  • YYYY
  • zzzzzz
  • 如果不对输入进行目视检查,则完全不清楚其中的任何一个变量是什么。定义另一个变量所包含的变量的唯一方法是只提取变量名称,然后只提取仪表中给出的内容来定义捕获内容。我的第一次捕获将为您提供:

  • 中交

  • AAAAA
  • “xxxxxxxx”:正确
  • bbbbbbbb
  • “yyyy”:真,“zzzzzz”:真
  • 但即使它确实考虑到将两个正则表达式组合成一个正则表达式的复杂性:

    您将得到以下匹配项:

  • 中交

  • AAAAA
  • “xxxxxxxx”:正确
  • xxxxxxxx
  • bbbbbbbb
  • “yyyy”:真,“zzzzzz”:真
  • YYYY
  • zzzzzz
  • 您必须处理整个捕获集,将捕获识别为内容。您可以通过查找任何空捕获或任何包含
    '“
    字符的捕获来实现这一点。然后,您可以假设内容捕获之前的每个变量都是包含变量,内容捕获之后的每个变量都是包含变量;直到下一个包含变量


    当然,除了创建大量额外的工作之外,正如我所链接的,这在JavaScript正则表达式中目前是不可能的。因此,我将回到我最初的回答:为了避免正则表达式而支持编程解决方案,
    JSON.parse
    或类似的正则表达式应该总是首选,因为正则表达式很脆弱。

    您正在寻找
    JSON.parse
    ,不是正则表达式。事实上,我生成了如下文本界面:)我认为从JSON对象开始,以另一种方式生成一个交互式漂亮的打印要做更多的工作?@GertCuykens:不,我可以向您保证使用脆弱的(正则表达式)文本替换将比简单的编程创建更为复杂。鉴于JSON不是一种常规语言,至少没有通用的解决方案。@GertCuykens我觉得很沮丧,因为你收到了大量反对票,“想知道是否可以使用正则表达式。”这些否决票可能是在宣布试图使用正则表达式解析此输入的愚蠢行为。我同意这种看法,但我不同意这种基于这种看法的否决票。有一个+1来抵消。对不起,我没有投反对票,其他人投了。我感谢你的帮助,PS我只能用s.replace做一个正则表达式,我认为,使用第二个替换将使其更加复杂。@Downvoter一些关于downvote原因的澄清将非常有帮助。@GertCuykens不幸的是,如果您只需要在一个正则表达式中完成,这在JavaScript中是不可能的。我已经编辑了我的答案,解释了为什么你必须使用两个正则表达式。谢谢你,接受了答案并投了赞成票,试图补偿匿名的反对票
    [^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{((?:[^"]*"((?:[^\\"]|\\.)*)"\s*:\s*{(.*)})*)}