如何替换 JavaScript 中所有出现的字符串
技术问答
279 人阅读
|
0 人回复
|
2023-09-11
|
我的 JavaScript 代码中有这个字符串:
% z, B% I/ B$ L! J5 b5 g* ]"Test abc test test abc test test test abc test test abc"
3 E* P7 H+ [8 n' S 正在做:+ W0 r" V3 F. [9 e$ C0 K" M
9 M4 V% P- j" F- str = str.replace('abccode]似乎只删除了abc第一次出现在上面的字符串中。& y- x+ e/ M8 @' o1 K/ ?: q
- 我怎样才能取代它呢?所有出现?
B: S( m3 _+ g( x* p -
3 r& J, l a; \( P" A( ]. o - 解决方案:
1 S! S* q* g2 s; V3 m: G - 支持现代浏览器ECMAScript 2021 语言规范定义String.replaceAll()方法。4 p4 E: u4 ^/ U/ Y, b. ^0 m) z
- 旧版/旧版浏览器:[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);}
9 T! H* \+ j @ 以下是答案的演变:& \+ C+ k2 U4 ?3 [2 ]% n
* Z1 T4 w/ w, z! Z( [% h
- str = str.replace(/abc/g,code]如果‘abc’变量传递会怎样?! ~# B6 A1 \+ M' F7 }8 t
- [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);}
; F5 w; W) k6 x5 d9 T 注意:正则表达式包含特殊(元)字符,因此在find在上述函数中盲目传输参数而不预处理以转换这些字符是危险的。Mozilla 开发人员网络JavaScript 介绍了正则表达指南,提供了以下实用程序功能(自最初编写答案以来至少两次更改,请检查 MDN 站点获得潜在更新):) b3 }$ W" j& C3 O- V
function escapeRegExp(string) { return string.replace(/[.* ?^${}()|[\]\\]/g,'\\$&'); // $& means the whole matched string}# B* `! A( T9 L6 \
因此,为了使上述replaceAll()功能更安全。如果您还包含以下内容,可以将其修改为以下内容escapeRegExp:
6 a1 X' B* u! T' f- j8 _: Hfunction replaceAll(str,find,replace) { return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}2 R. z5 c7 k5 t0 [
|
|
|
|
|
|