捕获组用()提取子串并可通过\1引用,如/(abc)\1/匹配"abcabc";2. 非捕获组(?:)仅分组不捕获,提升性能

JavaScript正则表达式提供了多种高级匹配模式,帮助开发者更精确地处理复杂的字符串匹配需求。这些模式通过特殊的语法标志和结构实现,能显著提升文本处理的灵活性和效率。
1. 捕获组与反向引用
捕获组是用括号 () 包裹的一部分正则表达式,用于提取匹配的子字符串或在后续匹配中引用。
- 使用 (pattern) 创建捕获组,匹配内容可通过索引获取
- 在正则内部使用 \1, \2 等进行反向引用,表示重复之前捕获的内容
- 例如:/(abc)\1/ 可匹配 "abcabc"
2. 非捕获组
如果只需要分组功能而不需要捕获内容,可使用非捕获组,以提升性能并避免不必要的索引占用。
- 语法为 /(?:http|https):\/\/.+/ 匹配网址但不单独捕获协议部分
3. 命名捕获组
ES2018 引入命名捕获组,允许为捕获组指定名称,使代码更易读和维护。
立即学习“Java免费学习笔记(深入)”;
- 语法为 (?
pattern) - 匹配后可通过 groups.name 访问
- 例如:/(?
\d{4})-(? 可清晰提取日期部分\d{2})/
4. 正向与负向先行断言
先行断言(Lookahead)用于判断某个模式是否紧跟在当前位置之后,但不消耗字符。
JSON(JavaScript Object Notation) 定义:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。有需要的朋友可以下载看看
- 正向先行断言:(?=pattern),要求后面跟着 pattern
- 负向先行断言:(?!pattern),要求后面不能是 pattern
- 例如:/\d+(?=px)/ 匹配后面跟有 "px" 的数字,如 "10px" 中的 "10"
5. 正向与负向后行断言
后行断言(Lookbehind)判断某个模式是否出现在当前位置之前。
- 正向后行断言:(?,要求前面是 pattern
- 负向后行断言:(?,要求前面不能是 pattern
- 例如:/(? 匹配前面带 "$" 的数字,如 "$20" 中的 "20"
6. Unicode 支持
处理国际化文本时,Unicode 模式非常关键。
- 使用 u 标志启用完整 Unicode 支持
- 可正确处理代理对(如 emoji)和 Unicode 属性类
- 例如:/\p{L}+/u 匹配任意语言的字母
7. 粘连模式(Sticky Matching)
粘连模式确保匹配仅从指定位置开始,常用于逐段解析。
- 使用 y 标志启用
- 配合 lastIndex 属性控制起始位置
- 例如:可用于词法分析器中按顺序提取标记
基本上就这些。掌握这些高级模式,能让正则表达式更强大且更具可读性。实际使用时注意浏览器兼容性,尤其是命名组和后行断言等较新特性。合理组合这些技术,可以高效解决大多数复杂文本匹配问题。









