只有在被分隔符分割时才匹配一个/几个组

时间:2015-09-24 23:24:39

标签: regex

我需要设计一个能够匹配 以下名称的正则表达式:

Dany and Andy
Steve
Dany and Steve and Andy
Andy and Steve

但未能匹配以下名称:

and
and Dany
Steve and Nancy and

换句话说,我需要一个可以匹配的正则表达式:

  1. 名称。
  2. 两个名称,如果它们被分隔符'和'。
  3. 分隔
  4. 三个名称,如果每个名称与前一个/后一个分隔符'和'。
  5. 分开

    到目前为止我所拥有的:https://regex101.com/r/qQ2fY2/1 - 它很难看,我不喜欢它。我也不喜欢我必须两次输入“Kuba”的事实(我只想把它放一次)。

    我怎样才能做到这一点? (我尝试过前瞻等等,但我想我做不到:/)。

1 个答案:

答案 0 :(得分:1)

基本上你想要匹配的是

^\w+(?: and \w+)*$
  • \w+后跟
  • 的单词
  • " and "和另一个字(任意次)

但这意味着另一个条件:这个词不能是"and"。在匹配单词之前,您确实需要一个负面的预测,以确保它不是"and"

^(?!and\b)\w+(?: and (?!and\b)\w+)*$
  • 注意我使用\bword boundary)来避免匹配" andy"等名称。

DEMO