JavaScript 中的字符串操作函数 replaceAll() 介绍和使用

发布于 2022-06-07 23:27:22 字数 2681 浏览 1070 评论 0

要替换 JavaScript 中的字符串,您可以使用 replaceAll()功能。
第一个参数是定义需要替换的正则表达式/模式或字符串。
第二个参数可以是作为替换的字符串,也可以是将被调用以创建替换的函数。

const sentence = 'The world is a cruel place.';
sentence.replaceAll('cruel', 'wonderful'); // The world is a wonderful place.

// Strings are immutable in JavaScript, so the original string stays the same
sentence; // The world is a cruel place.

请记住, replaceAll() 是 JavaScript 的一个相对较新的补充,作为 ES2021
支持 String.prototype.replaceAll() 在 Chrome 85(2020 年 8 月)和 Node.js 15 中引入。

自 2022 年起,我们 建议使用 replaceAll() 由于支持有限。
利用 String.prototype.replace() 用正则表达式代替。

const sentence = 'The world is a cruel place.';
sentence.replace(/cruel/g, 'wonderful'); // The world is a wonderful place.

使用正则表达式

如果您想涵盖更多需要替换的情况,可以使用正则表达式代替字符串。
重要的是不要让您的正则表达式必须具有 g 标志启用。
如果没有,JavaScript 会抛出一个 TypeError

const sentence = 'The world is a cruel place. Only cruel people thrive here.';
sentence.replaceAll(/cruel/ig, 'wonderful'); // The world is a wonderful place. Only wonderful people thrive here.

// TypeError: String.prototype.replaceAll called with a non-global RegExp argument
sentence.replaceAll(/cruel/i, 'wonderful');

使用函数

调用的函数会针对它找到的每个匹配项运行。 JavaScript 使用以下参数调用该函数:

  1. match,函数找到的匹配搜索条件的内容。
  2. pN/$N,其中 N 是带括号的捕获组找到的第 n 个字符串。 所以例如 /(\a+)(\b+)/ 有两个。
  3. offset,在字符串中找到匹配项的位置。
  4. string,被检查的字符串。
const sentence = 'abcd abcd';
sentence.replaceAll(/(a+)(b+)/ig, function(match, p1, p2, offset, string) {
  match; // ab
  p1; // a
  p2; // b
  offset; // 0 then 5 on the next iteration
  string; // abcd abcd
  return 'Hello';
}) // Hellocd Hellocd

但是,在运行此示例时, namedGroups返回未定义。 可能是不再支持该参数。什么时候 replaceAll()使用字符串调用时,JavaScript 使用以下 3 个参数调用替换函数:

  1. match
  2. offset
  3. string
const sentence = 'The world is a cruel place. Only cruel people thrive here.';
sentence.replaceAll('cruel', function(match, offset, string) {
  match; // cruel
  offset; // 15 then 33
  string; // The world is a cruel place. Only cruel people thrive here.
  return match.toUpperCase();
}); // The world is a CRUEL place. Only CRUEL people thrive here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

三生一梦

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文