如何替换 JavaScript 中所有出现的字符串
技术问答
400 人阅读
|
0 人回复
|
2023-09-11
|
我的 JavaScript 代码中有这个字符串:
7 K4 R$ q0 V4 `* I. F$ M! [# I `) J"Test abc test test abc test test test abc test test abc"
" d( g" Q: v0 I; ~, M! P9 g 正在做:
) r) Z7 Z4 F: u4 }
' C, |: k& I7 ]$ r- str = str.replace('abccode]似乎只删除了abc第一次出现在上面的字符串中。5 W% d" c( ]3 A& E N
- 我怎样才能取代它呢?所有出现?
# w) L( t" V7 c1 {# r - $ i/ H0 t+ w# j) r
- 解决方案: 4 T; I7 `0 x$ q# K% o
- 支持现代浏览器ECMAScript 2021 语言规范定义String.replaceAll()方法。
- }) C! S6 j; ~ U - 旧版/旧版浏览器:[code]function escapeRegExp(string) { return string.replace(/[.* ?^${}()|[\]\\]/g,'\\$& // $& means the whole matched string}function replaceAll(str,find,replace) { return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}
+ Z4 C: e. N) x: m7 l. ^) B 以下是答案的演变:1 Q/ D$ I) f9 j
" n. b3 ~% N( R- n, Z
- str = str.replace(/abc/g,code]如果‘abc’变量传递会怎样?: H) s- a) r4 w. u7 D8 `2 }0 O: T1 Q5 Q
- [code]var find = 'abc';var re = new RegExp(find,'g');str = str.replace(re,code]可以进一步简化:[code]function replaceAll(str,find,replace) { return str.replace(new RegExp(find,'g'),replace);}6 a4 b C& t6 a
注意:正则表达式包含特殊(元)字符,因此在find在上述函数中盲目传输参数而不预处理以转换这些字符是危险的。Mozilla 开发人员网络JavaScript 介绍了正则表达指南,提供了以下实用程序功能(自最初编写答案以来至少两次更改,请检查 MDN 站点获得潜在更新):
3 B, w) N, h! x0 @* ufunction escapeRegExp(string) { return string.replace(/[.* ?^${}()|[\]\\]/g,'\\$&'); // $& means the whole matched string}& f; J u0 Q# `* J
因此,为了使上述replaceAll()功能更安全。如果您还包含以下内容,可以将其修改为以下内容escapeRegExp:( {" l' W8 t4 T& H5 Y; W. I7 r; v
function replaceAll(str,find,replace) { return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}; f' y U$ L( Q& v
|
|
|
|
|
|