2017-04-05 91 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字母(這裏的+意味着字符串不能與_結束)
  • $ - 字符串錨的結束