示例 :
01 = match
10 = match
99 = match
00 = no match
到目前为止,我有这个:
/^ [1-9][0-9] | [0-9][1-9] $/
但我觉得它可以优化。 最佳答案
您可以使用负前瞻来限制通用 [0-9]{2}
模式:
^(?!00)[0-9]{2}$
查看 regex demo
[0-9]{2}
将精确匹配 2 位数字。 (?!00)
negative lookahead 将在字符串的开头执行一次,并确保在字符串结束之前没有 00
。如果字符串等于 00
,则不会找到匹配项。在 How Negative Lookahead Works 上查看更多信息。
详细的模式解释:
^
- 字符串 (?!00)
- 如果在当前位置之后(在字符串的开头)有两个 0
,则匹配失败的负前瞻。由于下一个子模式 - [0-9]{2}$
- 只允许字符串中有 2 个符号,所以我们不必在前瞻中添加任何 anchor ,在其他情况下,必须添加 $
以排除 00
匹配。 [0-9]{2}
- 正好两个(由于限制量词 {min(,max)?}
)数字(在大多数风格中, [0-9]
可以替换为 \d
,但在某些风格中 \d
也可以比常规 [0123456789]
匹配更多)$
- 字符串的结尾(取决于正则表达式的风格,\z
可能更可取,因为它匹配字符串的最末尾)。 关于regex - 如何匹配任何两个不为零的数字的正则表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36426713/