如何替换 JavaScript 中所有出现的字符串
技术问答
331 人阅读
|
0 人回复
|
2023-09-11
|
我的 JavaScript 代码中有这个字符串:
+ r/ q- I) M4 T' N" }) F"Test abc test test abc test test test abc test test abc"6 G% U; l0 v/ L5 D
正在做:$ g. c, z L+ I( d7 ]
! v1 I0 C( v# T5 P A- str = str.replace('abccode]似乎只删除了abc第一次出现在上面的字符串中。4 U4 ]9 V5 w4 n! {/ @* Y
- 我怎样才能取代它呢?所有出现?
t; V& W; H, O4 W+ }8 Z2 v - : C% |5 I" h6 T
- 解决方案: 2 @; v- \7 u, u2 |2 ^* c R z
- 支持现代浏览器ECMAScript 2021 语言规范定义String.replaceAll()方法。
& r, z( Q* h: z' w* h( i - 旧版/旧版浏览器:[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);}. b2 e" s" B/ _. t$ w) I. Q
以下是答案的演变:
" g+ H9 p1 a, [$ x' r/ J, `2 G2 K n/ [. k6 v9 n, W( x$ {
- str = str.replace(/abc/g,code]如果‘abc’变量传递会怎样?
% B5 p# S. d; ^6 X1 ~& | [ - [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 b/ t. T6 i5 b: W) B( g
注意:正则表达式包含特殊(元)字符,因此在find在上述函数中盲目传输参数而不预处理以转换这些字符是危险的。Mozilla 开发人员网络JavaScript 介绍了正则表达指南,提供了以下实用程序功能(自最初编写答案以来至少两次更改,请检查 MDN 站点获得潜在更新):
5 Y! ~6 _0 J$ ]function escapeRegExp(string) { return string.replace(/[.* ?^${}()|[\]\\]/g,'\\$&'); // $& means the whole matched string}
* @0 v0 V. y( @' X9 {9 \& B/ K 因此,为了使上述replaceAll()功能更安全。如果您还包含以下内容,可以将其修改为以下内容escapeRegExp:
" [! Q2 X- ?1 P. g# N- a! Bfunction replaceAll(str,find,replace) { return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}" q& ]: _" i6 ?) b
|
|
|
|
|
|