在用正则匹配一个特定的className时,发现了一个问题,在此请教一下大家:比如,一个元素的完整的className是varf="acp1p4p0fep6p8p9p10p11ap7p3dp12";我想写一个正则能匹配出全部只能由"p"+数字组合的class。我自己写的一个正则如下:varreg=/(?:\s+|^)p\d+(?:\s+|$)/g;结果是:["p1","p0","p6","p9","p11","p12"]发现其中少匹配了p4p8p10这里颇为费解,后来我发现规律是相邻的多个“p数字”只会间隔着匹配到!我分析是因为:前面一个满足条件的匹配项,比如p1,它占据匹配到的前后空格,导致本来符合正则的紧邻的匹配项p4因为p1匹配项以及占据了后空格(即是后面的匹配项p4的前空格),导致p4自己不符合正则表达式的匹配了而导致匹配不到的。然后我修改正则为varreg=/(?:\s+?|^)p\d+(?:\s+?|$)/g;增加了一个最小匹配"?"这是原字符串:varf="acp1p4p0fep6p8p9p10p11ap7p3dp12";现在的正则结果变为,["p1","p4","p0","p6","p8","p9","p11","p12"]结果匹配的比之前多了,但是还是没有全部匹配到,其中少了p10分析发现第2个正则,对于匹配2个挨着的“p数字”之间只有1个空格的情况,会出现上述丢失的问题。间隔有1个空格以上可以全部匹配到。那么问题来了,正确的正则匹配上述要求应该如何写?对于第一种正则,它失配的原因到底怎么理解呢?我一直以为第一个正则是能匹配得到的望大神指点一二!!在此感激不尽!
慕尼黑8549860
相关分类