2017-04-05 60 views
1

我需要一个正则表达式来测试一个字符串是否符合如下规则:正则表达式匹配所有的资本,并强调

  1. 至少包含一个字(可能是只是一个字符)
  2. 所有字符应该是资本。
  3. 使用一个,且只有一个,下划线(_)每个单词对之间(例如HELLO_WOLRD

测试值(有效和无效):

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失败。

回答

2

在结尾需要一个*量词:

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

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

查看regex demo

详细

  • ^ - 字符串锚开始
  • [A-Z]+ - 1+大写ASCII字母(在这里+需要在字符串中的至少一个字母)
  • (?:_[A-Z]+)* - 非 - 捕获组匹配零个或多个序列:
    • _ - 下划线
    • [A-Z]+ - 1+大写ASCII字母(这里的+意味着字符串不能与_结束)
  • $ - 字符串锚的结束