整理捕获组、命名组以及 lookaround。
括号 (...) 会创建捕获组。可以把匹配的部分作为片段单独取出,或在替换式中用 $1·$2 重复使用。如果想创建组但不想捕获,就用 (?:...) 写非捕获组。
(?<name>...) 是命名捕获组。可以用名称而非编号来访问,模式越长可读性越好。在替换中用 $<name> 引用。
先行断言 (?=...) 匹配后面跟着特定模式的位置,(?!...) 匹配不跟着的位置,但不消耗那一部分。后行断言 (?<=...) 和 (?<!...) 以相同的方式检查前方。
lookaround 的核心在于它是「不消耗的条件」。像强密码检查那样需要叠加多个条件时,或者只想在特定语境中替换时,它非常强大。