【JavaScript】详解JavaScript中的replace()函数

JavaScript 中 replace() 函数最全详解(2025 最新版)

你绝对能在这篇文章里找到所有你想知道的 replace() 用法,包括新手常见坑和高级玩家技巧!

一、基本语法(两种重载)

string.replace(searchValue, replaceValue)// 或 string.replace(searchValue,function)
参数类型含义返回值
字符串普通字符串替换,只替换第一次出现新字符串
正则表达式支持全局 g、忽略大小写 i 等修饰符按规则替换后的新字符串
函数超级强大!可以动态计算每一个替换结果新字符串

注意:replace() 不会修改原字符串(字符串是不可变的),永远返回新字符串!

二、常见用法速查表(直接抄作业)

需求写法结果示例
替换第一次出现"aaabbb".replace("a", "X")“Xaabbb”
替换所有出现(重点!)"aaabbb".replace(/a/g, "X")“XXXbbb”
不区分大小写全局替换"AbcABCabc".replace(/aBc/i, "X") → 只会换第一个
/abc/gi
“XABCX”
替换多个不同内容`.replace(/catdog/g, “pet”)`
只替换第2次出现"aaa".replace(/a/g, (m, i) => i === 1 ? "X" : m)“aXa”
替换并保留原匹配内容(加前后缀)"hello".replace(/hello/g, '[HELLO]')“[HELLO]”
替换成大写"hello world".replace(/\b\w/g, c => c.toUpperCase())“Hello World”(首字母大写)

三、最强大用法:替换函数(必背!)

str.replace(regexp|substr,function(match, p1, p2,..., offset, string){// match :完整匹配的内容// p1,p2… :第1、2…个捕获组// offset :匹配项在原字符串中的起始位置// string :原字符串return'要替换成的内容';})
经典实战案例
// 1. 手机号中间4位变星号"13812345678".replace(/(\d{3})\d{4}(\d{4})/,'$1****$2')// → "138****5678"// 2. 更灵活写法(推荐)"13812345678".replace(/(\d{3})\d{4}(\d{4})/,(match, p1, p2)=>`${p1}****${p2}`)// → "138****5678"// 3. 千分位加逗号(最常见面试题)functionformatNumber(num){return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");}formatNumber(1234567890) → "1,234,567,890"// 4. 模板字符串替换(类似 Vue {{}})let data ={ name:"张三", age:18};let tpl ="你好,{{name}},今年{{age}}岁";let result = tpl.replace(/\{\{(\w+)\}\}/g,(match, key)=> data[key]||'');// → "你好,张三,今年18岁"// 5. 驼峰转中划线(css类名转换)"borderColor".replace(/([A-Z])/g,'-$1').toLowerCase()// → "border-color"// 6. 替换时知道是第几次匹配let count =0;"aaaa".replace(/a/g,()=>`X${++count}`)// → "X1X2X3X4"

四、超实用正则旗标表

旗标含义示例
gglobal,全局匹配/a/g 替换所有 a
iignoreCase,忽略大小写/abc/i 能匹配 AbC
mmultiline,多行模式^ 和 $ 可以匹配每一行开头结尾
sdotAll,. 可匹配换行符/./s
uunicode,支持 Unicode/\u{1F600}/u 匹配emoji
ysticky,粘性匹配很少用

五、常见坑 & 注意事项

场景错误写法正确写法
想替换所有但忘了加 g"aaa".replace(/a/, 'b')"aaa".replace(/a/g, 'b')
用字符串替换所有"aaa".replace('a', 'b')只会换第一个!必须用正则 + g
特殊字符 $ 要转义.replace(/$/g, 'dollar').replace(/\$/g, 'dollar')
$1 $2 捕获组在替换字符串中使用.replace(/(\d)/, $1 + 1)必须用函数,不能直接写 $1 + 1

六、一行代码解决 99% 需求

// 万能替换函数(建议封装)functionreplaceAll(str, search, replacement){return str.replace(newRegExp(search,'g'), replacement);}// 或者更安全(防止正则特殊字符报错)functionreplaceAll(str, search, replacement){return str.split(search).join(replacement);}

现在你已经完全掌握 JavaScript replace() 了!
这篇文章涵盖了从入门到高级的所有用法,直接收藏,面试、写业务再也不怕!

需要我给你出一个「replace() 练习题 20 道」或者「手写千分位、手机号脱敏、模板引擎」完整代码吗?随时说!

Read more

【JAVA 进阶】Spring Cloud 微服务全栈实践:从认知到落地

【JAVA 进阶】Spring Cloud 微服务全栈实践:从认知到落地

本文采用“总—分—总”结构,围绕 Spring Cloud 在微服务架构中的核心能力进行系统讲解。以理论为主、代码为辅,提供清晰多级目录与落地建议,适合已有 Spring Boot 基础、准备或正在进行微服务实践的工程师。 文章目录 * 1. 总览与定位 * 1.1 微服务背景与挑战 * 1.2 Spring Cloud 生态与版本矩阵 * 1.3 微服务能力全景图 * 2. 服务注册与发现 * 2.1 核心概念与术语 * 2.2 组件对比:Eureka / Consul / Nacos * 2.3 快速实践:Eureka Server 搭建 * 2.4

By Ne0inhk
C语言代码优化与性能调优:编译器优化、内存优化、算法优化与工具链配合

C语言代码优化与性能调优:编译器优化、内存优化、算法优化与工具链配合

C语言代码优化与性能调优:编译器优化、内存优化、算法优化与工具链配合 一、前言:为什么代码优化与性能调优是C语言开发的进阶技能? 学习目标 * 理解代码优化的本质:通过优化代码结构和算法,提高程序的执行效率 * 理解性能调优的本质:通过分析程序的运行时间和资源消耗,定位和修复性能瓶颈 * 明确代码优化与性能调优的重要性:提高程序的执行效率、节省资源、提升用户体验 * 掌握本章学习重点:编译器优化、内存优化、算法优化、工具链配合、避坑指南、实战案例分析 * 学会使用优化技术和工具链调优C语言程序 重点提示 💡 代码优化与性能调优是C语言开发的进阶技能!通过优化和调优,你可以提高程序的执行效率,节省资源,提升用户体验。 二、模块1:编译器优化——利用编译器提高程序效率 2.1 学习目标 * 理解编译器优化的本质:通过编译器的优化选项,自动优化代码 * 掌握gcc的优化选项:-O0、-O1、-O2、-O3、-Os、-Ofast * 掌握编译器优化的避坑指南:

By Ne0inhk

Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记

Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记 一、笔记概述 本文聚焦 Java IO 体系中高频使用的 4 个字符/字节流工具类(BufferedReader、BufferedWriter、PrintStream、PrintWriter),从核心定位、功能差异、适用场景、代码示例、拓展技巧五个维度拆解,帮助理解其设计逻辑与实际应用,解决“该用哪个流写/读数据”的核心问题。 二、核心定位与设计目标 这 4 个类分为两大阵营,核心设计目标差异显著: 1. 缓冲流阵营(BufferedReader + BufferedWriter) 属于 Java IO 底层高效字符流,核心目标是提升字符读写效率。通过内置字符缓冲区减少磁盘/网络 IO

By Ne0inhk
【从0开始学习Java | 第23篇】动态代理

【从0开始学习Java | 第23篇】动态代理

文章目录 * Java动态代理概述 * 一、动态代理的核心概念 * 形象解释 * 二、两种主流动态代理实现 * 1. JDK动态代理(基于接口) * 原理 * 示例代码 * 优缺点 * 2. CGLIB动态代理(基于子类) * 原理 * 示例代码(需引入CGLIB依赖) * 优缺点 * 三、JDK与CGLIB动态代理对比 * 四、实际应用场景 * 五、总结 Java动态代理概述 在Java开发中,代理模式设计模式之一,而动态代理作为代理模式的进阶形式,在框架开发(如Spring AOP)、日志记录、权限控制等场景中发挥着关键作用。本文将从核心概念出发,拆解两种主流动态代理的实现逻辑,并分析其适用场景。 一、动态代理的核心概念 动态代理指在程序运行时,通过反射机制动态生成代理类,而非在编译期预先定义。其核心价值在于:无需为每个目标类手动编写代理类,即可统一为多个目标类添加横切逻辑(如日志、事务、异常处理),降低代码耦合度。

By Ne0inhk