正则表达式匹配所有资本和下划线

时间:2017-04-05 07:40:16

标签: regex

我需要一个Regex来测试字符串是否符合以下规则:

  1. 至少包含一个单词(可能只是一个字符)
  2. 所有字符都应为大写。
  3. 在每个单词对之间使用一个,只有一个下划线(_)(例如HELLO_WOLRD
  4. 测试值(有效和无效):

    const validConstants = [
      'A',
      'HELLO',
      'HELLO_WORLD',
    ];
    const invalidConstants = [
      '',               // No empty string
      'Hello',          // All be Capitals
      'Add1',           // No numbers
      'HelloWorld',     // No camel cases
      'HELLO_WORLD_',   // Underscores should only be used between words
      '_HELLO_WORLD',   // Underscores should only be used between words
      'HELLO__WORLD',   // Too much Underscores between words
    ];
    

    我尝试了^[A-Z]+(?:_[A-Z]+)+$,但在AHELLO中失败了。

1 个答案:

答案 0 :(得分:5)

最后需要*量词:

^[A-Z]+(?:_[A-Z]+)*$
                  ^ 

(?:_[A-Z]+)*将匹配或更多_和1个或更多大写ASCII字母的序列。

请参阅regex demo

<强>详情:

  • ^ - 字符串锚的开始
  • [A-Z]+ - 1+大写ASCII字母(此处+至少需要字母中的一个字母)
  • (?:_[A-Z]+)* - 匹配零个或多个序列的非捕获组:
    • _ - 下划线
    • [A-Z]+ - 1个大写ASCII字母(此处+表示字符串不能以_结尾)
  • $ - 字符串锚点结束