回答

收藏

如何替换 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! B
    function replaceAll(str,find,replace) {  return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}" q& ]: _" i6 ?) b
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则