正则表达式匹配所有的资本,并强调
问题描述:
我需要一个正则表达式来测试一个字符串是否符合如下规则:正则表达式匹配所有的资本,并强调
- 至少包含一个字(可能是只是一个字符)
- 所有字符应该是资本。
- 使用一个,且只有一个,下划线(
_
)每个单词对之间(例如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]+)+$
,但它在A
和HELLO
失败。
答
在结尾需要一个*
量词:
^[A-Z]+(?:_[A-Z]+)*$
^
的(?:_[A-Z]+)*
将匹配_
和1个或多个大写ASCII字母零或多个序列。
查看regex demo。
详细:
-
^
- 字符串锚开始 -
[A-Z]+
- 1+大写ASCII字母(在这里+
需要在字符串中的至少一个字母) -
(?:_[A-Z]+)*
- 非 - 捕获组匹配零个或多个序列:-
_
- 下划线 -
[A-Z]+
- 1+大写ASCII字母(这里的+
意味着字符串不能与_
结束)
-
-
$
- 字符串锚的结束