下划线或连字符的正则表达式模式,但不能同时使用

标签 regex

我有一个正则表达式,它允许一个字符串是独立的,由连字符和下划线分隔。

我需要帮助,所以字符串只需要连字符或下划线,而不是两者。

这是我到目前为止。

^([a-z][a-z0-9]*)([-_]{1}[a-z0-9]+)*$

foo             = passed
foo-bar         = passed
foo_bar         = passed
foo-bar-baz     = passed
foo_bar_baz     = passed
foo-bar_baz_qux = passed # but I don't want it to
foo_bar-baz-quz = passed # but I don't want it to

最佳答案

您可以稍微扩展模式并使用反向引用来仅匹配相同的分隔符:

^[a-z][a-z0-9]*(?:([-_])[a-z0-9]+(?:\1[a-z0-9]+)*)?$

regex demo

详情 :
  • ^ - 字符串开头
  • [a-z][a-z0-9]* - 一个字母后跟 0+ 小写字母或数字
  • (?:([-_])[a-z0-9]+(?:\1[a-z0-9]+)*)? - 一个可选的序列:
  • ([-_]) - 捕获组 1 匹配 -_
  • [a-z0-9]+ - 1+ 个小写字母或数字
  • (?:\1[a-z0-9]+)* - 0+ 序列:
  • \1 - 与第 1 组相同的值
  • [a-z0-9]+ - 1 个或多个小写字母或数字
  • $ - 字符串的结尾。
  • 关于下划线或连字符的正则表达式模式,但不能同时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126784/

    相关文章:

    jquery - 在 JQUERY 中使用 RegEx 仅检查整数

    python - 如何将 Python 中的所有 unicode 小写字符与正则表达式匹配?

    javascript 正则表达式来指示字符串开头不需要的数字

    javascript - Regex exec 只返回第一场比赛

    javascript - 从javascript生成的文本中删除点

    Java 正则表达式帮助

    regex - Wiremock 与正则表达式不匹配

    c# - 帮助我使用 RegExp 拆分字符串

    regex - Morphia mongoDB 通配符查询

    Java从字符串中删除非拉丁基本字符