这个非数字的只有蛞蝓正则表达式有什么问题



我正在尝试获得鼻涕虫的模式匹配,这些将是字母数字序列,连字符分隔。

可以是:

  • 起始或结束的号码,但不只是数字
  • 也只能是字母
  • 可以也可以只有一个字

我得到了/[a-z0-9]+(?:-[a-z0-9]+)*$/,它几乎可以工作,但它会匹配。310

例如:

  • 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建议的

最新更新