简单的正则expression式与重复无序的匹配

我有这个正则expression式

/^[az]{1,}( (?=[az])){0,}(_(?=[az])){0,}[az]{0,}$/ 

我想匹配

 ag_b_cf_ajk 

要么

 zva bc de 

要么

 hh_b opxop a_b 

所以任何由单个空格或下划线分隔的字符标记。

(在上面的正则expression式中,我们有一个文字空间,这是合法的,我们有前瞻,确保空格或下划线后面跟着一个字符)。

问题是,我上面的正则expression式只匹配第一个空格或下划线,如下所示:

 axz_be axz be 

但是这些失败

 axz_be_j axz be j 

我相信我错过了正则expression式的一些概念,以解决这个问题,因为我一直在尝试过去的几个小时!

看来你可以使用

 ^[az]+(?:[_ ][az]+)*$ 

看正则expression式演示

正则expression式匹配

  • ^ – string的开始
  • [az]+ – 一个或多个小写ASCII字母
  • (?:[_ ][az]+)* – 零个或多个序列:
    • [_ ] – 空格或下划线
    • [az]+ – 一个或多个小写ASCII字母
  • $ – string的结尾

如果空格或下划线至less出现一次,请使用+量词而不是*

 ^[az]+(?:[_ ][az]+)+$ ^ 

要为下划线和连字符添加多字符替代,您需要引入另一个非捕获组:

 ^[az]+(?:(?:[_ ]|\[])[az]+)+$ 

看另一个正则expression式演示