正则表达式以分号分隔的列表

时间:2016-12-22 09:26:38

标签: regex

我有一个由1个或多个a个字符组成的单词列表,以分号分隔。该列表可以为空。是否可以编写一个匹配所有可能的有效列表的单个正则表达式而不是其他内容? 有效列表:

''
'a'
'aaaaa'
'a;a'
'aaa;a'
'a;aaaaa;aaa'

无效的列表:

';aa'
'a;'
';'
'aaa;;a'

我能想出的最接近的事情是:

^(a+)*(;a+)*$

匹配无效的;a或:

^(a+)+(;a+)*$

与有效的空列表不匹配。

1 个答案:

答案 0 :(得分:1)

^(a+(?:;a+)*)?$

  1. a+:匹配a一次或多次
  2. (?:;a+)*:匹配一个或多个a零次或多次
  3. (...)?:匹配''(空字符串)
  4. 这是使用HTML的演示

    input:valid {
      color: green;
      font-weight: bold
    }
    input:invalid {
      color: red;
    }
    <input type="text" pattern="(a+(?:;a+)*)?" placeholder="Type here" />

    同样的正则表达式也可以用OR(|)写成

    ^(a+(?:;a+)*|)$

    input:valid {
      color: green;
      font-weight: bold
    }
    input:invalid {
      color: red;
    }
    <input type="text" pattern="(a+(?:;a+)*|)" placeholder="Type here" />