回答

收藏

如何替换 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 _: H
    function replaceAll(str,find,replace) {  return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}2 R. z5 c7 k5 t0 [
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则