我正在尝试获得鼻涕虫的模式匹配,这些将是字母数字序列,连字符分隔。
可以是:
- 起始或结束的号码,但不只是数字
- 也只能是字母
- 可以也可以只有一个字
我得到了/[a-z0-9]+(?:-[a-z0-9]+)*$/
,它几乎可以工作,但它会匹配。3
或10
例如:
- 2020-best year-of-world应该匹配
- 最好的应该匹配
- 2021最佳应匹配
- 2021不匹配
我在这里留下一个regex101链接与我的测试
除了添加锚^
来断言字符串的开始,您还可以添加一个负向前看,不仅匹配数字,否则您的模式也将只匹配2020。
^(?![d]+$)[a-z0-9]+(?:-[a-z0-9]+)*$
在部分中,模式匹配:
^
字符串 起始(?![d]+$)
负向前看,断言不仅连字符和数字到右边[a-z0-9]+
匹配1+个a-z或0-9(?:-[a-z0-9]+)*
可选地重复前面以-
开头的模式$
字符串结束
Regex演示
这个怎么样:
[a-z0-9]*(-*[a-z])+(?:-[a-z0-9]+)*$
- 以字符或数字开头
- 它需要包含char或
-
在中间(部分我从你的正则表达式中添加,为了过滤只有数字) - 以字符、数字结尾
我不确定是否,例如2020-2021应该匹配。如果它不应该,你应该在中间部分做一个小的编辑…
我已经在您建议的相同工具中进行了测试
编辑:固定regex接受单个字符,如Tom Lord建议的