JavaScript中的正则表达式模式匹配?
Javascript中的模式匹配 我想制作与字符串匹配的图案JavaScript中的正则表达式模式匹配?,javascript,regex,forms,Javascript,Regex,Forms,Javascript中的模式匹配 我想制作与字符串匹配的图案 {"ABC":["A1","X30","2","A2","X31","3","A3","X90","9"],"XYZ":["A1","X31","2",&qu
{"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次:
,第3部分仅包含数字[A-Z0-9]
非捕获组(?:
,“[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次:
,第3部分仅包含数字[A-Z0-9]
非捕获组(?:
,“[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”]}它不适用于这样的字符串,因为在第一个和第二个元素中应该有一个数字后跟大写字母,然后使用