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

Simple regex with repeated unordered matches

本文关键字:简单 正则表达式 无序      更新时间:2023-09-26

我有这个正则表达式

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

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

似乎你可以使用

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

查看正则表达式演示

正则表达式匹配

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

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

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

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

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

查看另一个正则表达式演示