我正在摆弄正则表达式,试图理解模式是如何工作的,但我似乎不能得到它的权利。
我正在测试一个数字串,这个测试应该只对由以下内容组成的字符串返回true:任选部分(数字“9”后加空格或不加空格)和所需部分(任意三位数)。因此,像“345”、“9345”和“9 345”这样的字符串应返回true,而像“99345”、“9 345”这样的字符串应返回true。(这里应该是两个空格,自动样式会将其压缩为一个空格)“345”“45”或“3456”应该返回false。
我得到的最接近期望结果的是regex模式/^[9]?[ ]?\d{3}$/
,它几乎适合,但对于字符串“345”仍然返回true。
我试着从这里开始,将pattern修改为/^[9]?[(?<=9) ]?\d{3}$/
,这样只有在空格前面有9时空格才匹配,但似乎不起作用,结果与前面的模式相同。然后,我尝试使用/^[9|9 ]?\d{3}$/
来暗示字符串可以以“9”开头,也可以不以“9“开头,但对于“345”仍然返回true,对于“9345”出于某种原因。
我还尝试了这个版本的/^[^ ]^[9]?[ ]?\d{3}$/
和/^[^\s]^[9]?[ ]?\d{3}$/
,以及这个/^[\S]^[9]?[ ]?\d{3}$/
,以暗示字符串不能以空格(或空白本身)开始,但这似乎只会破坏一切,因为没有匹配的true。
我现在没有主意了,所以任何提示和建议都很感激。
2条答案
按热度按时间sz81bmfz1#
您可以将模式编写为可选地匹配一个9,后跟一个可选的空格:
Regex demo
如果你想让0和9都是可选的,并且你想使用lookarounds(你不需要这样做,因为可选组也足够了):
使用lookbehindAssert字符串在匹配后不以空格开头
使用lookaheadAssert字符串不以空格开头
l3zydbqr2#
正则表达式
^(9 |9)?\d{3}$
工作吗?我个人使用https://regexr.com来构建我的正则表达式。测试部分允许您输入正则表达式必须通过和失败的内容