JavaScript 字符串替换与replaceAll

2024-03-16

ECMAScript 2021 添加了新的 String 函数replaceAll。 很久以前,在一个不远的星系里,人们使用split + join或正则表达式替换所有出现的字符串 https://stackoverflow.com/questions/1144783/how-to-replace-all-occurrences-of-a-string-in-javascript.

我创建了以下示例来将新方法与旧方法进行比较。 虽然我可以在第一种情况下看到一些差异,例如我不能使用替换模式 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll#specifying_a_string_as_a_parameter with split + join或者我需要转义特殊字符RegExp(str,"g"),我看不出第二种情况有什么区别。

新方法和旧方法有什么区别(行为差异、性能、浏览器兼容性......)?

const source = "abcdefabcdef";
const str1 = "abc", str2 = "xyz";
const reg1 = /abc/g, reg2 = "xyz";

//Case 1 : When we want to replace a string by another
console.log(source.split(str1).join(str2));
console.log(source.replace(new RegExp(str1,"g"),str2));
//versus
console.log(source.replaceAll(str1,str2));

//Case 2 : When we want to use a regular expression
console.log(source.replace(reg1,reg2));
//versus
console.log(source.replaceAll(reg1,reg2));

//Result = "xyzdefxyzdef"

从搜集到的文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll for replaceAll,我们发现以下花絮:

const newStr = str.replaceAll(regexp|substr, newSubstr|function)

注意:当使用regexp你必须设置全局(“g”)标志;否则,它将抛出 TypeError:“replaceAll 必须使用全局 RegExp 调用”。

换句话说,当调用replaceAll使用正则表达式文字或RegExp,它必须使用全局标志。所以,打电话似乎没有多大收获replaceAll与仅使用当前的replace。然而,有一个区别是replaceAll是当向它传递一个字符串时,它会自动进行全局替换。在这里,您可以节省一些打字时间,而不必输入全局标志。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 字符串替换与replaceAll 的相关文章

  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • Ext JS - 如何滚动到文本区域的底部

    这是我下面的代码 如何滚动到文本区域的底部 它一定是类似的东西 Ext getCmp output setScrollPosition Ext getCmp output getScrollHeight 这是我的文本区域代码 var myW
  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 使用 Javascript 在 Imacros 中循环

    我如何使用 javascript 循环 imm imacros 脚本 我搜索了一下 发现了这个 for i 0 i lt n i iimPlay marconame iim 但当我使用它时 我的浏览器 Firefox 18 挂起 for i
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • JavaScript 动画平滑滚动

    默认情况下 当您有这样的片段链接时 a href some url some fragment some text a 浏览器立即向下滚动到该片段 我该如何编程才能使用标准 JS 顺利地向下移动到该片段 这是一个例子 Example htt
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • 将文本拆分为数组,同时保留 Swift 中的标点符号

    我想将文本拆分为一个数组 保持标点符号与其余单词分隔开 因此字符串如下 Hello I am Albert Einstein 应该变成这样的数组 Hello I am Albert Einstein 我尝试过sting components
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1
  • Bootstrap 3 / 显示模式不适用于 javascript 方式

    我用Modal http getbootstrap com javascript modalsBootstrap 3 0 的功能 我有这个代码 a href myNestedContent Open the modal containing

随机推荐

  • C 预处理器插入的空格

    假设我们得到以下输入 C 代码 define Y 20 define A x 10 x Y A A 40 gcc E像这样的输出 10 10 40 20 20 gcc E traditional cpp像这样的输出 10 10 40 20
  • Linux 内核是如何测试的?

    Linux 内核开发人员如何在本地测试他们的代码以及在提交代码后 他们是否使用某种单元测试和构建自动化 测试计划 Linux 内核非常重视社区测试 通常 任何开发人员都会在提交之前测试自己的代码 并且通常他们会使用 Linus 的内核开发版
  • Javascript数组排序和唯一性

    我有一个像这样的 JavaScript 数组 var myData 237 124 255 124 366 255 我需要数组元素是唯一的并且已排序 myData 0 124 myData 1 237 myData 2 255 myData
  • 发出 Facebook 好友请求时可以获取吗?

    friend request 流包含 2 个字段 uid from 和 uid to 没有关于提出请求的日期信息 还有其他表包含该信息吗 Thanks 在 Facebook 论坛上得到回复 这是不可能的
  • 一段时间后服务停止工作。需要连续工作

    我正在开发一个计步器应用程序 在其中计算行走的步数并在午夜将其更新到服务器 我有一个持续运行的服务来完成这一切 这是我的服务 public class StepCounterService extends Service implement
  • jquery .hover 不适用于 AJAX 呈现的元素

    我有一些通过 AJAX 调用创建的元素 在这些元素中 有一个子元素 当悬停时需要显示另一个动态创建的子元素 当我运行 hoverjquery 在小提琴中 工作正常 当我在代码中实现它时 它不想工作 我想知道这是否取决于什么时候 hover加
  • 使用 Apache HttpClient 的 Java HTTPPost 请求

    我需要一个java程序来生成以下请求 我正在使用 Apache HttpClient 库 但仍然无法生成如下请求 这是我的 python 程序生成的 我编写了一个等效的 java 程序 但它抛出了403 2012 09 10 15 12 0
  • Java GC 是确定性的吗

    我正在具有相同 JVM 参数的 Java 产品上多次运行同一场景 每次运行都会在持续时间和 开始时间 方面给出不同的 GC 行为 这是预期的吗 您是否手动运行System gc 因为这并不能保证立即 甚至根本不 真正执行垃圾收集 对于自动垃
  • Delphi:系统菜单打开了吗?

    在 Delphi 中 我需要一个函数来确定系统菜单 分别是窗口菜 单 单击图标时出现的菜单 是否打开 原因是我正在编写一个反键盘记录器功能 它将垃圾发送到当前活动的编辑控件 这也阻止了键盘记录器读取 WinAPI 消息来读取内容 但是 如果
  • 为 bash --login -i 执行自定义初始化脚本,例如从快捷方式更改为自定义目录

    现在我在 Windows 7 上使用 MSysGit 它是从 bat 文件启动的 该文件本身调用bash exe login i启动一个外壳 此时它会执行用户主目录中的 bashrc 文件 以及其他文件 我使用这个脚本来设置环境并cd到起始
  • 如何不在主线程上运行服务?

    我正在尝试启动service然后打开socket与服务器建立连接 单击按钮我创建新的Thread然后开始服务 Thread t new Thread public void run mIntent new Intent MainActivi
  • 如何在 OS X C 代码中创建异步计时器?

    所以这个问题实际上是 为什么 time h 在 OS X 和 Linux 上不一样 但是 我已经接受了这些分歧 为了在 Unix 系统上创建计时器 我遵循了本教程http www helsinki fi atk unix dec manua
  • WordPress:为特定插件管理页面加载自定义 CSS

    我正在学习 WordPress 我想为我的插件的特定管理页面加载自定义 CSS 我阅读了 WordPress Plugin API 并执行了如下操作 I ADD MY OPTION PAGES add action admin menu m
  • 迭代 socket.io v1 中的套接字? “......没有方法‘客户’”

    在我能够写出这样的东西之前 io sockets clients forEach function socket socket emit signal data 现在 我不能并且收到错误Object
  • 关于扩展 GAS 电子表格用途的问题

    I would like to offer the opportunity to view output from the same data in a spreadsheet TBA http glasier hk blazer scri
  • 本地化 IOS 按钮标签

    我使用本地化字符串来本地化 UI 元素 除了本地化按钮标题之外 一切正常 21 title 应该是本地化文本 不起作用 我认为这可能是由按钮状态引起的 forState UIControlStateNormal 标题可以通过视图状态设置 我
  • 为更多字段设置相同的属性

    我有两个或更多文本字段 我想对它们应用相同的属性 避免编写两次或多次相同的代码 这不起作用 form validate rules name surname required true minlength 3 maxlength 50 有任
  • Line3DCollection 多彩线条边缘呈“锯齿状”

    基于matplotlib 示例代码 http matplotlib org examples pylab examples multicolored line html我构建了一条彩色线条的 3D 版本 我正在 jupyter 笔记本中工作
  • Smullyan 数值机的解决方案

    在这里我建议找到 Smullyan 数值机的解决方案 此处定义 http heras gilsanz com manuel smullyan machines html 问题陈述 它们是接受数字列表作为输入 并根据输入模式遵循一些规则将其转
  • JavaScript 字符串替换与replaceAll

    ECMAScript 2021 添加了新的 String 函数replaceAll 很久以前 在一个不远的星系里 人们使用split join或正则表达式替换所有出现的字符串 https stackoverflow com question