我需要一个与用户输入字符串匹配的正则表达式。这有点难以解释,所以让我说明我的意思:
它应匹配此字符串:
"XXXX units"
,其中XXXX是任意数字。
但是它也应该匹配该字符串开头的任何子字符串,所以:
"123"
"123 u"
"123 uni"
也应该匹配。
但当然,这不应该匹配:
"123 xx"
看起来很简单,但我无法弄明白。这是我最接近的:
^\d+ ?u?n?i?t?s?
...但遗憾的是,它还会匹配" 123us"等字符串。
有人可以帮忙吗?这是javascript,所以我可能会因缺少一些背后/前方功能而受到限制......
答案 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)?)?)?)?)?)?$/