如何创建"逐步匹配"的正则表达式?

Zis*_*sou 7 javascript regex

我需要一个与用户输入字符串匹配的正则表达式.这有点难以解释,所以让我说明我的意思:

它应匹配此字符串:

"XXXX units",其中XXXX是任何数字.

但它也应匹配该字符串开头的任何子字符串,因此:

"123"
"123 u"
"123 uni"
Run Code Online (Sandbox Code Playgroud)

也应该匹配.

但当然,这不应该匹配:

"123 xx"
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但我无法弄明白.这是我最接近的:

^\d+ ?u?n?i?t?s?
Run Code Online (Sandbox Code Playgroud)

...但不幸的是,它也匹配像"123us"这样的字符串.

有人可以帮忙吗?这是javascript,所以我可能会因为缺少外观/前方功能而受到限制......

Ken*_*ney 8

只需添加一些():

/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/
Run Code Online (Sandbox Code Playgroud)

测试:

/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/.test("123 units")  -> true
/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/.test("123 un")     -> true
/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/.test("123 ui")     -> false
/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/.test("12")         -> true
/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/.test("123 xx")     -> false
Run Code Online (Sandbox Code Playgroud)