符合以下条件的正确的正则表达式是什么:
匹配的示例:
不应匹配的示例:
这样的事情可能吗?
答案 0 :(得分:5)
可能你可以用这个:
^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
答案 1 :(得分:5)
否,这对于正则表达式是不可能的(至少,JS风格)。您可以引用已经匹配的组,但不能引用它们的属性(例如长度)。
当然,有了最大长度限制,你可以挤出一个具有所有可能性的表达式,但即使长度为5,这也是一个难以维护的混乱。只想象最大len = 10会有多愚蠢。因此我建议:
m = str.match(/^(\d+)\s*-\s*(\d+)$/)
valid = m && m[1].length == m[2].length
答案 2 :(得分:3)
试试这个:
^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$