回答

收藏

如何替换 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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则