我怎样才能创建一个逐渐匹配的"正则表达式?

时间:2015-12-07 17:12:29

标签: javascript regex

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

它应匹配此字符串:

"XXXX units",其中XXXX是任意数字。

但是它也应该匹配该字符串开头的任何子字符串,所以:

"123"
"123 u"
"123 uni"

也应该匹配。

但当然,这不应该匹配:

"123 xx"

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

^\d+ ?u?n?i?t?s?

...但遗憾的是,它还会匹配" 123us"等字符串。

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

3 个答案:

答案 0 :(得分:8)

只需添加一些()

/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/

测试:

/^\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

答案 1 :(得分:1)

它看起来并不好,但它完成了工作......

^(\d+( (u(n(i(t(s)?)?)?)?)?)?)?$

答案 2 :(得分:1)

在这里演示:https://regex101.com/r/uC7pX1/6

/^\d+( (u(n(i(t(s)?)?)?)?)?)?$/