首页 > 精选资讯 > 严选问答 >

问 js 正则替换 语法与实战详解

2026-11-08 17:00:11
最佳答案

答

JS 正则替换核心就是使用字符串的 replace 方法,搭配正则表达式,把匹配到的内容替换成指定文本,基础语法是str.replace(正则, 替换内容),默认情况下如果正则没有加全局修饰符 g,只会替换第一个匹配项,想要全文所有匹配都替换,必须加上 g 全局标记,很多新手踩坑就是忘记写 g,导致只替换一处,replace 还支持回调函数,可以拿到捕获分组,做复杂动态替换,除了简单固定文本替换,还可以利用 $1 $2 引用捕获组,这是 JS 正则替换非常常用的高级用法,本篇会讲解基础语法、修饰符、捕获组引用、回调函数替换、常见实战案例,同时说明常见报错和坑点。

核心语法对照表

写法说明
str.replace (/ 正则 /, 替换值)只替换第一个匹配
str.replace (/ 正则 /g, 替换值)全局替换全部匹配
str.replace (/ 正则 /gi, 替换值)全局 + 忽略大小写
str.replace(reg, function(match){})回调动态替换

常用修饰符清单

1 g global 全局匹配,替换所有符合项

2 i ignoreCase 忽略大小写

3 m multiline 多行模式,^ $ 匹配每一行首尾

捕获组特殊符号

$& 代表整个匹配到的字符串

$1 第一个括号捕获分组

$2 第二个括号捕获分组

基础代码示例

const str = "hello 123 hello 456"

// 只替换第一个hello

const res1 = str.replace(/hello/, "你好")

// 全局替换所有hello

const res2 = str.replace(/hello/g, "你好")

console.log(res2)

捕获组替换案例

把手机号中间四位替换成星号

const phone = "13812345678"

const newPhone = phone.replace(/(\d{3})\d{4}(\d{4})/, "$1$2")

console.log(newPhone) // 1385678

回调函数动态替换

const text = "a1 b2 c3"

const result = text.replace(/(\w)(\d)/g, function(match, char, num){

return char + Number(num)10

})

常见实战场景

1 去除字符串所有空格

str.replace(/\s+/g, "")

2 替换 html 标签

str.replace(/<[^>]+>/g, "")

3 统一换行符

str.replace(/\r\n|\r|\n/g, "
")

4 敏感词替换

str.replace(/敏感词/g, "")

重要踩坑步骤

第一步,确认是否需要全部替换,忘记 g 只会替换第一个匹配项

第二步,正则里面特殊字符需要转义,比如 . + ? () [] ^ $ \ ,如果要匹配本身,前面加反斜杠

第三步,replace 不会修改原字符串,它返回新字符串,原字符串保持不变,这个是高频误区

第四步,如果正则是字符串形式创建,需要双重转义,new RegExp("\\s+","g")

综合总结,js 正则替换就是调用 replace,搭配正则表达式,全局替换记得加 g 标记,复杂场景可以使用捕获组 $1 或者回调函数动态生成替换内容,replace 返回新字符串,不会改动原始字符串。

【常见问题】

问题 1 js 正则替换为什么只替换第一个

回答 1 js 正则替换只替换第一个,是因为正则没有加 g 全局修饰符,js 正则替换加上 /g 之后,就可以匹配全部内容完成全局替换。

问题 2 js 正则替换会修改原来的字符串吗

回答 1 js 正则替换不会修改原字符串,js 正则替换的 replace 方法返回一个全新字符串,原始字符串保持不变,需要用变量接收返回结果。

问题 3 js 正则替换里面 $1 是什么意思

回答 1 js 正则替换里面 $1 代表正则第一个括号捕获分组,js 正则替换可以使用 $1 $2 这种语法,引用分组内容拼接新的替换文本。

【免责申明】

本文属于前端 JS 技术科普,正则语法遵循 ECMAScript 标准,不同浏览器内核基础正则兼容基本一致,部分高级正则特性存在版本差异,代码仅作学习参考,不代表其他立场。