匹配以下条件的正确正则表达式是什么:
两个数字,以短划线( - )分隔
两个数字必须具有相同的位数,但至少为1且不超过5位
之前/之后/之间的数字和短划线可能有任意的空格
匹配的示例:
123-444
1234 - 5678
98-76
不匹配的示例:
1234-567
123456-789012
这样的事情可能吗?
可能你可以使用这个:
^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
No ,这对于正则表达式是不可能的(至少,JS风格) . 您可以引用已匹配的组,但不能引用其属性(例如长度) .
当然,有了最大长度限制,你可以挤出一个具有所有可能性的表达式,但即使长度为5,这也是一个难以维护的混乱 . 只想象最大len = 10会有多傻 . 所以我建议:
m = str.match(/^(\d+)\s*-\s*(\d+)$/) valid = m && m[1].length == m[2].length
试试这个:
3 回答
可能你可以使用这个:
在线演示:http://regex101.com/r/jG0dB7
No ,这对于正则表达式是不可能的(至少,JS风格) . 您可以引用已匹配的组,但不能引用其属性(例如长度) .
当然,有了最大长度限制,你可以挤出一个具有所有可能性的表达式,但即使长度为5,这也是一个难以维护的混乱 . 只想象最大len = 10会有多傻 . 所以我建议:
试试这个: