正则表达式中的选择和分支(Alternation)

选择(Alternation) 是正则表达式中实现“或”逻辑的核心机制,使用竖线 | 来分隔多个备选模式。匹配时,正则引擎会从左到右尝试每个分支,一旦某个分支成功匹配,就停止尝试。

这让正则能同时匹配多种不同的模式,非常适合处理多格式输入、可选变体等场景。

1. 基本语法:|(分支操作符)
语法描述示例匹配说明
`ab`匹配 a 或 b`/cat
`^ab$`结合锚点限制位置`/^cat
  • | 的优先级很低,几乎最低(仅高于量词后的修饰符),它会作用于整个模式的两侧。
  • 因此,通常需要用括号 () 来明确分支范围。
2. 结合分组控制分支范围
示例说明
`/(catdog)/`
`/^(catdog)$/i`
`/(https?ftp)😕//`
`/^(1920)\d{2}$/`
3. 多分支与优先级(从左到右)

正则引擎按分支顺序尝试,左边的优先

示例匹配结果
`/catdog
`/dogcat/` 匹配 “cat”

最佳实践:将更具体、更常见的模式放在左边,提高效率和准确性。

示例:

/^(jpeg|jpg|png|gif|webp)$/i

优先匹配 “jpeg” 而不是让 “jpg” 抢走 “jpeg” 的前三个字符。

4. 复杂分支示例
场景正则表达式说明
匹配多种日期格式`/^\d{4}-\d{2}-\d{2}$^\d{2}/\d{2}/\d{4}$
匹配邮箱提供商`/@(gmail.comyahoo.com
匹配颜色值`/^#([A-Fa-f0-9]{6}[A-Fa-f0-9]{3})$/`
匹配手机号(多种前缀)`/^1(34
5. 分支与量词的结合

量词作用于紧邻的模式,分支时需注意分组:

示例正确匹配错误理解
`/a(bcde)+f/`“abcdebcdef” 等
`/abcdef+/`“abc” 或 “defff”
`/(ab)+(cd)+/`“abab” 或 “cdcd”
6. 实际应用场景
场景正则示例用途
验证多种图片格式`/.(jpe?gpng
匹配美式/英式拼写`/colorcolour/i`
解析日志级别`/^(ERRORWARN
匹配 IPv4 地址(简化版)`/^((\d{1,2}1\d{2}
去除多种空白`/\s+ 
7. 注意事项

选择和分支是正则表达式实现“多路匹配”的核心,结合分组、量词和锚点,能处理非常复杂的模式变体。掌握它后,你能轻松应对现实中多种格式并存的文本处理需求!

如果你有具体格式需要匹配(如多种时间格式、日志解析等),欢迎提供例子,我可以帮你设计最优正则。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐