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