Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_Forms - Fatal编程技术网

JavaScript中的正则表达式模式匹配?

JavaScript中的正则表达式模式匹配?,javascript,regex,forms,Javascript,Regex,Forms,Javascript中的模式匹配 我想制作与字符串匹配的图案 {"ABC":["A1","X30","2","A2","X31","3","A3","X90","9"],"XYZ":["A1","X31","2",&qu

Javascript中的模式匹配

我想制作与字符串匹配的图案

{"ABC":["A1","X30","2","A2","X31","3","A3","X90","9"],"XYZ":["A1","X31","2","A3","X40","7"]}
            
我使用了正则表达式模式

{("["A-Z0-9"]+":["[A-Z0-9]+","[A-Z0-9]+","[0-9]+"],)+}
但它并不匹配

每个数组长度仅为3的倍数,一对3中的第一个和第二个元素仅由
[A-Z0-9]
组成,第三个元素仅由
[0-9]
组成

例如:
“A1”、“X30”
(前两个元素)和
“2”
(第三个元素)类似地,在3个元素之后,此模式重复
“A2”、“X31”
作为第一和第二个元素,重复
“3”
作为第三个元素

测试模式-1:

{"ABC":["A1","X30","2"],"XYZ":["A1","X31","2","A3","X40","7"]}
测试模式-2:

{"ABC":["A1","X30","2","A2","X31","3","A3","X90","9"],"XYZ":["A1","X31","2","A3","X40","7"]}
测试模式-3:

{"ABC":["A1","X30","2"]}

您必须选择再次使用3个零件重复内部零件:

{"["A-Z0-9"]+":["[A-Z0-9]+","[A-Z0-9]+","[0-9]+"(?:,"[A-Z0-9]+","[A-Z0-9]+","[0-9]+")*](?:,"["A-Z0-9"]+":["[A-Z0-9]+","[A-Z0-9]+","[0-9]+"(?:,"[A-Z0-9]+","[A-Z0-9]+","[0-9]+")*])*}
该模式分为以下几个部分:

  • {
    匹配开头
    {
  • “[“A-Z0-9”]+”:[“[A-Z0-9]+”,[A-Z0-9]+”,“[0-9]+”
    匹配
    前面的部分,后面是3个部分,包括2次
    [A-Z0-9]
    ,第3部分仅包含数字
  • (?:
    非捕获组
    • ,“[A-Z0-9]+”,“[A-Z0-9]+”,“[0-9]+”
  • )*
    关闭非捕获组并可选地重复
  • ]
    匹配
    ]
  • (?:
    非捕获组
    • ,“[“A-Z0-9”]+”:[“[A-Z0-9]+”,“[A-Z0-9]+”,“[0-9]+”
      再次匹配
      前面的零件和后面的3个零件
    • (?:
      非捕获组
      • ,“[A-Z0-9]+”,“[A-Z0-9]+”,“[0-9]+”
        匹配逗号并再次重复第一部分
    • )*
      关闭非捕获组并可选地重复
    • ]
      匹配
      ]
  • )*
    关闭非捕获组并可选地重复
  • }
    匹配结束
    }

您必须有选择地再次使用3个零件重复内部零件:

{"["A-Z0-9"]+":["[A-Z0-9]+","[A-Z0-9]+","[0-9]+"(?:,"[A-Z0-9]+","[A-Z0-9]+","[0-9]+")*](?:,"["A-Z0-9"]+":["[A-Z0-9]+","[A-Z0-9]+","[0-9]+"(?:,"[A-Z0-9]+","[A-Z0-9]+","[0-9]+")*])*}
该模式分为以下几个部分:

  • {
    匹配开头
    {
  • “[“A-Z0-9”]+”:[“[A-Z0-9]+”,[A-Z0-9]+”,“[0-9]+”
    匹配
    前面的部分,后面是3个部分,包括2次
    [A-Z0-9]
    ,第3部分仅包含数字
  • (?:
    非捕获组
    • ,“[A-Z0-9]+”,“[A-Z0-9]+”,“[0-9]+”
  • )*
    关闭非捕获组并可选地重复
  • ]
    匹配
    ]
  • (?:
    非捕获组
    • ,“[“A-Z0-9”]+”:[“[A-Z0-9]+”,“[A-Z0-9]+”,“[0-9]+”
      再次匹配
      前面的零件和后面的3个零件
    • (?:
      非捕获组
      • ,“[A-Z0-9]+”,“[A-Z0-9]+”,“[0-9]+”
        匹配逗号并再次重复第一部分
    • )*
      关闭非捕获组并可选地重复
    • ]
      匹配
      ]
  • )*
    关闭非捕获组并可选地重复
  • }
    匹配结束
    }

这是一个正确的模式:

{("[A-Z0-9]+":\[("[A-Z0-9]+","[A-Z0-9]+","[0-9]+"(,|(?=\])))+\](,|(?=})))+}
其中
(,|(?=\])
表示“匹配
或检查其后面是否有
]

看一个演示


无论如何,如果您想确保没有不需要的行为,应该使用JSON解析器。

这是一种正确的模式:

{("[A-Z0-9]+":\[("[A-Z0-9]+","[A-Z0-9]+","[0-9]+"(,|(?=\])))+\](,|(?=})))+}
其中
(,|(?=\])
表示“匹配
或检查其后面是否有
]

看一个演示


无论如何,如果您想确保没有不需要的行为,应该使用JSON解析器。

您可以添加子组

{("[A-Z0-9]+":\[("[A-Z0-9]+","[A-Z0-9]+","[0-9]+",?)+\],?)+}

您可以添加子组

{("[A-Z0-9]+":\[("[A-Z0-9]+","[A-Z0-9]+","[0-9]+",?)+\],?)+}

{“ABC”:[“A1”、“X”、“2”]}它对这样的字符串不起作用,因为在第一个和第二个元素中应该有一个数字后跟大写字母。然后你可以用
[a-Z][0-9]+
替换
[a-Z][0-9]+
部分。我已经将[a-Z0-9]+改为[a-Z]+[0-9]+,它可以工作!!谢谢{“ABC”:[“A1”,“X”,“2”]}它对这样的字符串不起作用,因为在第一个和第二个元素中应该有一个数字后跟大写字母。然后你可以用
[a-Z0-9]+
部分替换为
[a-Z][0-9]+
或者相反的方式。我已经将[a-Z0-9]+改为[a-Z]+[0-9]+,它可以工作!!谢谢{“ABC”:[“A1”,“X”,“2”]}它不适用于这样的字符串,因为在第一个和第二个元素中应该有一个数字后跟大写字母,然后使用{“ABC”:[“A1”,“X”,“2”]}它不适用于这样的字符串,因为在第一个和第二个元素中应该有一个数字后跟大写字母,然后使用