我正在尝试Javascript的正则表达式。
我知道'|
'用于对两个正则表达式进行或运算。
我创建了一个正则表达式/^a*|b*$/
,并希望它检测到仅包含'a'或'b'字符的任何字符串。
但是当我尝试/^a*|b*$/.test('c')
时,它会产生true
吗?
我对'|
'运算符的了解不足吗?
这是我的代码:
let reg = /^a*|b*$/;
< undefined
reg.test('c');
< true
答案 0 :(得分:3)
|
的优先级非常低。 ^a*|b*$
个匹配项
^a*
b*$
即以0或多个'a'开头的字符串或以0或多个'b'结尾的字符串。 (因为正则表达式允许匹配0'a,所以任何字符串都将匹配(因为每个字符串都有一个开始)。)
要正确地将比赛双方固定在一起,您需要
/^(?:a*|b*)$/
((?:
)
构造是一个非捕获组)。
您也可以使用
/^a*$|^b*$/
相反。
请注意,这两个正则表达式只会匹配aa
,bbbbbb
等字符串,而不会匹配aba
。如果要允许在字符串中使用混合的a / b字符,则需要类似
/^(?:a|b)*$/
答案 1 :(得分:0)
OR 将在以下替代方式中拆分表达式:
^a*
和b*$
。
您可以使用组来分隔替代项
类似
/^(a*|b*)$/
这将匹配空字符串,仅包含a
个字符的字符串和仅包含b
个字符的字符串。
如果您要匹配包含a
和b
字符的字符串,则可以使用类似以下内容的
/^[ab]*$/