如何替换 JavaScript 中所有出现的字符串
技术问答
401 人阅读
|
0 人回复
|
2023-09-11
|
我的 JavaScript 代码中有这个字符串:+ h- q w4 }9 U5 C& w
"Test abc test test abc test test test abc test test abc"
- K" q: H' B: U& e1 n 正在做:* s E9 o% T) B5 K- v
- Y7 U" |$ q" A; E9 q
- str = str.replace('abccode]似乎只删除了abc第一次出现在上面的字符串中。
. q. |+ L0 _1 y: h$ g3 F - 我怎样才能取代它呢?所有出现?
& s* `6 z) g3 R, w5 Q -
& I: K9 w% L4 `) i# I i - 解决方案:
$ n( N& q8 q! j: M' d, E' [! A+ a" M - 支持现代浏览器ECMAScript 2021 语言规范定义String.replaceAll()方法。
8 o: Q) K/ N! x& H! C! Y0 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);}1 H+ G2 n; l8 E
以下是答案的演变:' i' a3 i$ G% [) F* K
6 }/ h* T# ~: p* o- str = str.replace(/abc/g,code]如果‘abc’变量传递会怎样?
( x. A% N6 x/ J - [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);}
1 b. |9 \0 M+ d! G- n5 r 注意:正则表达式包含特殊(元)字符,因此在find在上述函数中盲目传输参数而不预处理以转换这些字符是危险的。Mozilla 开发人员网络JavaScript 介绍了正则表达指南,提供了以下实用程序功能(自最初编写答案以来至少两次更改,请检查 MDN 站点获得潜在更新):
* x7 }9 e8 i, L0 g$ v& l7 _; x9 \function escapeRegExp(string) { return string.replace(/[.* ?^${}()|[\]\\]/g,'\\$&'); // $& means the whole matched string}
* \' c5 n$ W8 y' H 因此,为了使上述replaceAll()功能更安全。如果您还包含以下内容,可以将其修改为以下内容escapeRegExp:. W/ d0 M+ H& k( u) G9 R5 c
function replaceAll(str,find,replace) { return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}
& a- L- w, K/ I" @6 c0 Z |
|
|
|
|
|