0

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

这是我的代码:

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

2 回答 2

3

|具有非常低的优先级。^a*|b*$火柴

  • 任何一个^a*
  • 或者b*$

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

要正确锚定双方的比赛,您需要

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

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

你也可以使用

/^a*$|^b*$/

反而。

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

/^(?:a|b)*$/
于 2018-08-22T04:12:40.780 回答
0

您示例中的OR会将表达式拆分为以下选项: ^a*b*$.

您可以使用组来划分备选方案

就像是

/^(a*|b*)$/

这将匹配空字符串、仅包含a字符的字符串和仅包含字符的字符串b

如果您要匹配同时包含ab字符的字符串,您可以使用以下内容:

/^[ab]*$/
于 2018-08-22T04:14:38.360 回答