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

时间:2016-03-08 21:31:40

标签: javascript regex node.js

我有这个正则表达式

/^[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

我相信我错过了一些正则表达式的概念,以便解决这个问题,因为我在过去的几个小时里一直在努力!

1 个答案:

答案 0 :(得分:7)

似乎你可以使用

^[a-z]+(?:[_ ][a-z]+)*$

请参阅regex demo

正则表达式匹配

  • ^ - 字符串开头
  • [a-z]+ - 一个或多个小写ASCII字母
  • (?:[_ ][a-z]+)* - 零个或多个序列:
    • [_ ] - 空格或下划线
    • [a-z]+ - 一个或多个小写ASCII字母
  • $ - 字符串结尾

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

^[a-z]+(?:[_ ][a-z]+)+$
                     ^

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

^[a-z]+(?:(?:[_ ]|\[])[a-z]+)+$

请参阅another regex demo