我有这个正则表达式
/^[a-z]{1,}( (?=[a-z])){0,}(_(?=[a-z])){0,}[a-z]{0,}$/
我想匹配
ag_b_cf_ajk
或
zva b c de
或
hh_b opxop a_b
所以任何字符标记由单个空格或下划线分隔。
(在上面的正则表达式中,我们有一个文字空间,这是合法的,我们有前瞻,确保空格或下划线后跟一个字符)。
问题是,我的上面的正则表达式只匹配第一个空格或下划线,如下所示:
axz_be
axz be
但这些失败
axz_be_j
axz be j
我相信我错过了一些正则表达式的概念,以便解决这个问题,因为我在过去的几个小时里一直在努力!
答案 0 :(得分:7)
似乎你可以使用
^[a-z]+(?:[_ ][a-z]+)*$
请参阅regex demo
正则表达式匹配
^
- 字符串开头[a-z]+
- 一个或多个小写ASCII字母(?:[_ ][a-z]+)*
- 零个或多个序列:
[_ ]
- 空格或下划线[a-z]+
- 一个或多个小写ASCII字母$
- 字符串结尾如果空格或下划线必须至少出现一次,请使用+
量词而不是*
:
^[a-z]+(?:[_ ][a-z]+)+$
^
要添加下划线和连字符的多字符替代,您需要引入另一个非捕获组:
^[a-z]+(?:(?:[_ ]|\[])[a-z]+)+$