首页/开发/正则与编码速查/JS 字符串替换中的正则用法

JS 字符串替换中的正则用法

JS 替换接口支持模板与回调两种替换值:模板用美元符号引用整体匹配、前后文本与分组,回调按固定顺序接收匹配、分组、位置、原串与命名分组对象。默认只替换第一处,全量替换需要全局标志,全量替换接口传入非全局正则会抛错。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌​​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

JS 字符串替换中的正则用法

替换接口的第二个参数既可以是带占位符的模板字符串,也可以是函数。模板形式写起来短,但占位符里的美元符号有特殊含义,容易与业务文本冲突;函数形式能拿到分组、匹配位置与整段原文,适合需要判断或查表的改写。默认只替换第一处,除非正则带全局标志。

基本信息

接口形态替换方法接收搜索值(字符串或正则)与替换值(字符串或函数)
模板占位符美元符号后接特定字符表示整体匹配、匹配前文本、匹配后文本与分组引用
回调参数依次是整体匹配、各捕获组、匹配位置、原字符串,以及命名分组对象
替换次数不带全局标志只替换第一处;全量替换的接口要求正则带全局标志

典型使用场景

  • 格式改写:把日期分隔符、单位写法统一为规范形式
  • 脱敏:按模式把敏感片段替换成掩码,日志输出前统一处理
  • 占位符渲染:把模板中的变量名替换为实际取值
  • 条件改写:根据匹配到的分组内容决定替换结果,用回调集中处理
  • 跨语言移植:把其他语言的替换引用语法改写为本地写法时注意占位符差异

替换写法实测

替换写法实测
'ab'.replace(/a/, '[$&]');            // '[a]b':整体匹配的占位符
'ab'.replace(/(?<x>a)/, '$<x>$<x>');    // 'aab':命名分组引用
'abc'.replace(/b/, '$$');              // 'a$c':双美元符号表示字面美元符号
'a1b2'.replace(/\d/, '#');             // 'a#b2':只替换第一处
'a1b2'.replace(/\d/g, '#');            // 'a#b#':带上全局标志才全量替换
'a1b2'.replaceAll(/\d/g, '#');         // 全量替换接口,传非全局正则会抛类型错误
'a-1'.replace(/(\w)-(\d)/, (...args) => JSON.stringify(args.slice(0, 3)));

模板占位符与回调

形式含义注意
美元符号加单个符号整体匹配业务文本里出现美元符号需转义
美元符号加数字按序号引用捕获组超过两位数字的组号写法有限制
美元符号加尖括号按名字引用捕获组模式里必须有同名分组
回调函数自行计算替换内容参数顺序固定,命名分组对象在最后
全量替换接口替换所有匹配正则必须带全局标志
字符串形式的搜索值按字面替换只有第一次出现被替换
回调的返回值为空值时会被转换成字符串写进结果,例如返回空值会得到字面量文本而不是被跳过;需要在某些情况下保持原样时,应显式返回整体匹配内容。
业务文本中如果包含美元符号或形似占位符的片段,模板方式会误解释;这类场景改用回调函数最稳,回调返回的字符串不会再被当作模板解析。

易错点

  • 替换时忘记全局标志:只替换第一处,剩余内容原样保留,调用方往往不会立刻察觉
  • 模板里出现业务美元符号:被当作占位符解释,替换结果与预期不符,需写成双美元符号
  • 误用全量替换接口:传入非全局正则会直接抛类型错误,中断整个处理流程
  • 回调参数顺序理解错误:命名分组对象位于最后且并非所有情况都会传入,取值前需要判空
  • 在替换模板里引用未参与的组:得到空内容或字面量引用,改写结果静默出错

数据来源与参考

  • MDN:String.prototype.replace 与 replaceAll
  • ECMAScript 语言规范:替换模板中的替换模式语义
  • MDN:正则捕获组与命名分组引用

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/js-string-replace-regex.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‌​‌‌​​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​