如何在正则表达式中正确使用“或”运算符?

时间:2018-08-22 04:07:58

标签: javascript regex alternation

我正在尝试Javascript的正则表达式。
我知道'|'用于对两个正则表达式进行或运算。
我创建了一个正则表达式/^a*|b*$/,并希望它检测到仅包含'a'或'b'字符的任何字符串。
但是当我尝试/^a*|b*$/.test('c')时,它会产生true吗?
我对'|'运算符的了解不足吗?

这是我的代码:

let reg = /^a*|b*$/;
< undefined
reg.test('c');
< true

2 个答案:

答案 0 :(得分:3)

|的优先级非常低。 ^a*|b*$个匹配项

  • ^a*
  • b*$

即以0或多个'a'开头的字符串或以0或多个'b'结尾的字符串。 (因为正则表达式允许匹配0'a,所以任何字符串都将匹配(因为每个字符串都有一个开始)。)

要正确地将比赛双方固定在一起,您需要

/^(?:a*|b*)$/

(?: )构造是一个非捕获组)。

您也可以使用

/^a*$|^b*$/

相反。

请注意,这两个正则表达式只会匹配aabbbbbb等字符串,而不会匹配aba。如果要允许在字符串中使用混合的a / b字符,则需要类似

/^(?:a|b)*$/

答案 1 :(得分:0)

您的示例中的

OR 将在以下替代方式中拆分表达式: ^a*b*$

您可以使用组来分隔替代项

类似

/^(a*|b*)$/

这将匹配空字符串,仅包含a个字符的字符串和仅包含b个字符的字符串。

如果您要匹配包含ab字符的字符串,则可以使用类似以下内容的

/^[ab]*$/