我有一个正则表达式,它允许一个字符串是独立的,由连字符和下划线分隔。
我需要帮助,所以字符串只需要连字符或下划线,而不是两者。
这是我到目前为止。
^([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/