回答

收藏

如何替换 JavaScript 中所有出现的字符串

技术问答 技术问答 400 人阅读 | 0 人回复 | 2023-09-11

我的 JavaScript 代码中有这个字符串:
7 K4 R$ q0 V4 `* I. F$ M! [# I  `) J
    "Test abc test test abc test test test abc test test abc"
    " d( g" Q: v0 I; ~, M! P9 g
正在做:
) r) Z7 Z4 F: u4 }

    ' C, |: k& I7 ]$ r
  • str = str.replace('abccode]似乎只删除了abc第一次出现在上面的字符串中。5 W% d" c( ]3 A& E  N
  • 我怎样才能取代它呢?所有出现?
    # w) L( t" V7 c1 {# r
  •                                                                $ i/ H0 t+ w# j) r
  •     解决方案:                                                               4 T; I7 `0 x$ q# K% o
  •                                                                 支持现代浏览器ECMAScript 2021 语言规范定义String.replaceAll()方法。
    - }) C! S6 j; ~  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);}
    + Z4 C: e. N) x: m7 l. ^) B
以下是答案的演变:1 Q/ D$ I) f9 j
    " n. b3 ~% N( R- n, Z
  • str = str.replace(/abc/g,code]如果‘abc’变量传递会怎样?: H) s- a) r4 w. u7 D8 `2 }0 O: T1 Q5 Q
  • [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 a4 b  C& t6 a
注意:正则表达式包含特殊(元)字符,因此在find在上述函数中盲目传输参数而不预处理以转换这些字符是危险的。Mozilla 开发人员网络JavaScript 介绍了正则表达指南,提供了以下实用程序功能(自最初编写答案以来至少两次更改,请检查 MDN 站点获得潜在更新):
3 B, w) N, h! x0 @* u
    function escapeRegExp(string) {  return string.replace(/[.* ?^${}()|[\]\\]/g,'\\$&'); // $& means the whole matched string}& f; J  u0 Q# `* J
因此,为了使上述replaceAll()功能更安全。如果您还包含以下内容,可以将其修改为以下内容escapeRegExp:( {" l' W8 t4 T& H5 Y; W. I7 r; v
    function replaceAll(str,find,replace) {  return str.replace(new RegExp(escapeRegExp(find),'g'),replace);}; f' y  U$ L( Q& v
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则