当前位置: 首页 > backend >正文

js 正则中的$0,1,2,3 是怎么用的

在正则表达式中,$0$1$2$3 等是反向引用(backreference),主要用于替换操作中引用正则匹配到的分组内容。以下是具体用法和示例:


1. 基本概念

  • $0:代表正则表达式完整匹配的整个文本(即匹配到的全部内容)。例如,正则 /(\d+)-(\d+)/ 匹配 "123-456" 时,$0 就是 "123-456"
  • $1$2$3:分别引用第1、2、3个**捕获组(用小括号 () 包裹的部分)**的内容。例如:
    • 正则 /(\d+)-(\d+)/ 匹配 "123-456" 时:
      • $1 = "123"(第一个分组)
      • $2 = "456"(第二个分组)。

2. 常见用途

(1)字符串替换

在替换操作中,通过 $n 引用分组内容,重新排列或修改字符串:

  • 示例1(交换日期格式):
    "2025-04-29".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1");
    // 结果:"04/29/2025"($1=2025,$2=04,$3=29)
    
  • 示例2(Markdown链接转HTML):
    "[百度](http://baidu.com)".replace(/\[(.*?)\]\((.*?)\)/, '<a href="$2">$1</a>');
    // 结果:'<a href="http://baidu.com">百度</a>'
    
(2)动态生成内容

结合函数使用,实现更复杂的逻辑:

"123".replace(/(\d)/g, (match, p1) => `数字${p1}`);
// 结果:"数字1数字2数字3"(p1即$1,代表每个分组匹配的单个数字)

3. 不同语言中的差异

  • JavaScript/Java/Python:使用 $n 在替换字符串中引用分组(如 "$1")。
  • 正则表达式内部:若需在正则中反向引用分组,需用 \1\2 等(如 /(\d)\1/ 匹配重复数字 "11")。
  • $0 的特殊性:部分语言(如JavaScript)的替换函数中,$0 可直接使用,但某些语言(如Java)可能需要通过 matcher.group(0) 获取。

4. 实际应用场景

  • 格式化文本:如日期、电话号码的重新排列。
  • 模板渲染:替换占位符(如 {{name}} 替换为实际值)。
  • 数据清洗:提取或重组字符串中的特定部分(如URL处理)。

总结

  • $0:整个匹配结果。
  • $1$2:按顺序对应正则中的捕获组。
  • 灵活运用这些引用可以简化复杂的字符串操作,尤其在替换和模板生成中非常高效。
http://www.xdnf.cn/news/3016.html

相关文章:

  • 解析表观遗传学的工具——ChIP-seq(二)
  • 博客打卡-小易喜欢的数列-动态规划
  • python数据分析(六):Pandas 多数据操作全面指南
  • JAVA 枚举类的ordinal用法
  • JavaScript中 说说你对闭包的理解?闭包使用场景?
  • Java练习8
  • GBDT算法原理及Python实现
  • 2024jxcpc D.Magic LCM (logn筛质因子)
  • 百度CarLife实现手机车机无缝互联
  • BT134-ASEMI机器人功率器件专用BT134
  • 告别碎片化!两大先进分块技术如何提升RAG的语义连贯性?
  • 【系统参数合法性校验】spring-boot-starter-validation
  • PowerBI更新后出现提示,无法正常使用,解决办法
  • JavaScript == 和 ===区别,分别在什么情况使用?
  • 角度(degrees)和弧度(radians)转换关系
  • Oracle OCP证书有效期是三年?
  • 5 个开源 MCP 服务器
  • 【MongoDB篇】MongoDB的集合操作!
  • 【angular19】入门基础教程(四):默认的css隔离作用域
  • 基于Java,SpringBoot,HTML水文水质监测预警系统设计
  • 【最新 MCP 战神手册 08】工具使用详解:实现 AI 行动
  • 动态图表 -- eg1
  • Femap许可分配和监控
  • 4月29日星期二今日早报简报微语报早读
  • 优化PCB Via Stub系列(1):一次学会利用层叠设计降低Via Stub损耗
  • 使用 Ziegler-Nichols 法进行 PID 参数整定:实践指南
  • [计算机网络]物理层
  • 力扣-数据结构-二叉树
  • 3D可视化编辑器模版
  • AimRT 从零到一:官方示例精讲 —— 四、logger示例.md