javascript字符串搜索不改变原串,仅返回位置或匹配结果;替换生成新串,原串不变。indexof、lastindexof查索引,search和match支持正则,replace需正则加g标志才全局替换,replaceall仅支持字符串且兼容性有限。

JavaScript 中字符串的子串搜索与替换,核心在于区分“找得到”和“换得了”——查找方法不改变原字符串,只返回位置或匹配结果;替换方法则生成新字符串,原字符串始终不变。
常用查找方法对比
查找是替换的前提,不同方法适用场景不同:
- indexOf(searchValue, fromIndex):返回第一次出现的索引,找不到返回 -1。支持指定起始位置,但不支持正则。
- lastIndexOf(searchValue, fromIndex):从末尾向前查找,同样只返回一个位置。
-
search(regexp):只接受正则表达式,返回第一个匹配的起始索引,忽略
g标志,始终只找一次。 -
match(regexp):返回匹配数组(含
index和input属性),带g时返回全部匹配项,不带时只返回首个及捕获组信息。
replace() 的关键规则
这是最常用也最容易出错的替换方法,必须掌握三点:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 传入字符串作为 searchValue 时,仅替换第一个匹配项,例如
"aabb".replace("a", "x")→"xabb"。 - 要全局替换,必须用正则并添加
g标志,如/a/g;如需忽略大小写,加i,如/hello/gi。 - replaceValue 可以是字符串,也可以是函数。函数接收参数
(match, offset, string),适合动态生成替换内容,比如把所有数字加括号:s.replace(/\d+/g, m => `(${m})`)。
replaceAll() 的使用边界
ES2021 引入的 replaceAll() 简化了纯字符串的全局替换:
- 第一个参数必须是字符串,不能是正则表达式(除非不带
g,但这失去意义);若误传带g的正则,会直接报错。 - 它不支持正则的高级能力(如捕获组、条件匹配),所以复杂模式仍需
replace()配合正则。 - 兼容性需留意:IE 完全不支持,旧版 Safari(≤13.1)也不支持,生产环境建议检查或用
replace(/.../g, ...)替代。
实用组合技巧
真实开发中常需“先查再换”,几个典型做法:
- 想替换所有空格为下划线?
str.replace(/\s/g, "_")比str.replaceAll(" ", "_")更鲁棒(能处理制表符、换行等)。 - 想高亮关键词?用
replace()+ 函数:text.replace(new RegExp(keyword, "gi"), match => `<mark>${match}</mark>`)。 - 想安全替换 HTML 特殊字符?可结合
replace()与预定义映射对象,避免正则转义混乱。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










