繁体   English   中英

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

[英]How to use 'or' operator in regex properly?

我正在尝试使用Javascript的正则表达式。
据我所知,' | '用于对两个正则表达式进行“或”运算。
我创建了一个正则表达式/^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*$/

代替。

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

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

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

您可以使用组来定界替代方案

就像是

/^(a*|b*)$/

这将匹配空字符串,只包含字符串a字符,并且只包含字符串的b字符。

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

/^[ab]*$/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM