将多个字符串替换为多个其他字符串

2023-11-22

我正在尝试用多个其他单词替换字符串中的多个单词。该字符串是“我有一只猫、一只狗和一只山羊”。

然而,这不会产生“我有一只狗、一只山羊和一只猫”,而是产生“我有一只猫、一只猫和一只猫”。在JavaScript中是否可以同时用多个其他字符串替换多个字符串,从而产生正确的结果?

var str = "I have a cat, a dog, and a goat.";
str = str.replace(/cat/gi, "dog");
str = str.replace(/dog/gi, "goat");
str = str.replace(/goat/gi, "cat");

//this produces "I have a cat, a cat, and a cat"
//but I wanted to produce the string "I have a dog, a goat, and a cat".

具体解决方案

您可以使用一个函数来替换每一个。

var str = "I have a cat, a dog, and a goat.";
var mapObj = {
   cat:"dog",
   dog:"goat",
   goat:"cat"
};
str = str.replace(/cat|dog|goat/gi, function(matched){
  return mapObj[matched];
});

jsfiddle 示例

概括它

如果您想动态维护正则表达式并将未来的交换添加到地图中,您可以这样做

new RegExp(Object.keys(mapObj).join("|"),"gi"); 

生成正则表达式。那么它看起来就像这样

var mapObj = {cat:"dog",dog:"goat",goat:"cat"};

var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
str = str.replace(re, function(matched){
  return mapObj[matched];
});

要添加或更改更多替代品,您只需编辑地图即可。

摆弄动态正则表达式

使其可重复使用

如果您希望这是一个通用模式,您可以将其提取到这样的函数中

function replaceAll(str,mapObj){
    var re = new RegExp(Object.keys(mapObj).join("|"),"gi");

    return str.replace(re, function(matched){
        return mapObj[matched.toLowerCase()];
    });
}

因此,您只需将 str 和所需替换的映射传递给该函数,它就会返回转换后的字符串。

摆弄功能

为了确保 Object.keys 在旧版浏览器中工作,请添加一个填充,例如来自MDN or Es5.

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

将多个字符串替换为多个其他字符串 的相关文章

随机推荐

  • JComboBox 无法在 JTable TableHeader 中展开

    我已经阅读了 JTable JComboBox 对此类其他问题的大部分答复 但尚未找到解决我的问题的方法 我创建了一个包含 JComboBox TableHeader 元素的表 任何 JComboBox 元素都不会打开以显示项目列表 如何获
  • Android开发中MonoDroid VS Java?

    我非常了解 C 并且喜欢将 Visual Studio 作为 IDE 但现在我想开始为 android 开发 我发现关于单一机器人并想问一下它是否有任何缺点可以使 Java 更受欢迎 或者我应该卸载 Eclipse 并直接进入 MonoDr
  • Firebase错误:请求的数据超出了单个请求可以访问的最大大小

    我需要export my Firabase数据库为JSON通过 Firebase 控制台 但是当我这样做时 我在 JSON 文件中收到以下消息 请求的数据超出了可以访问的最大大小 单一请求 我怎样才能解决这个问题 额外细节 这是我在控制台中
  • 无法连接到 Google 云连接服务器

    我尝试在我的服务器和 Google Cloud 连接服务器 CCS 之间打开 XMPP 连接 但它不起作用 我正在使用 PHP 进行编程并使用 JAXL 库 这是我的代码
  • 异常处理——显示发生错误的行号? [复制]

    这个问题在这里已经有答案了 可能的重复 在异常处理中显示行号 有人可以告诉我如何获取发生错误的代码的行号并将其显示到控制台吗 其他信息 例如文件名或方法名称 将非常方便 如果您需要文件和行号 则无需解析 StackTrace 字符串 您可以
  • Adobe Flash Builder (flex4):addChild() 在此类中不可用。

    我想将 swf 加载到 flex 4 应用程序中以便使用它的类 var ldr Loader new Loader ldr load new URLRequest file path to fileswf ldr contentLoader
  • 如何使用 swiftlint 来检查单个文件?

    我想使用 swiftlint 来检查单个文件 我该如何实现这个目标 检查文档https github com realm SwiftLint没有帮助 您还可以通过以下方式执行此操作 swiftlint path path to your f
  • 垂直和水平对齐 checkBoxGroupInput

    在类似的帖子中 如何在 R Shiny 中对齐一组 checkboxGroupInput 复选框仅垂直对齐 如我的示例 或仅水平对齐 R 水平闪亮显示 checkboxGroupInput 我想知道是否有一种方法可以在两种意义上实现这一点
  • 闪亮的 R 对齐按钮

    我的 U i 文件中有两个按钮 div style display inline block submitButton Analysis div style display inline block downloadButton downl
  • matlab 是否有像 python 中那样的列表理解之类的东西?

    我正在寻找类似 matlab 中的列表推导式的东西 但是我在纪录片中找不到类似的东西 在Python中它会是这样的 A i 50 for i in range 50 Matlab 非常喜欢 矢量化 您可以将示例写为 A 0 49 50 Ma
  • 使用tensorflow的数据集管道,如何*命名*“map”操作的结果?

    我有下面的地图函数 可运行的示例 它输入一个string并输出一个string and an integer in tf data Dataset from tensor slices我将原始输入命名为 filenames 但是当我从地图函
  • 宏作为另一个宏的参数

    我正在尝试将参数传递给宏SETBIT与另一个像这样的预定义宏 define SETBIT ADDRESS BIT N N ADDRESS 1 lt
  • 如何将 React 与 p5.js 结合使用

    我真的很喜欢p5 js和react js 所以我想知道如何将这两个结合在一起 但我无法做到这一点 所以我需要你的帮助 我真的无法为您提供一些代码示例 因为我不知道如何开始 所以我想做的是 1 创建反应应用程序 2 使用p5 js渲染画布 我
  • 格式化/缩进我的 HTML 代码的 PHP 函数/类? [复制]

    这个问题在这里已经有答案了 是否有 PHP 函数 类可以清理我的 HTML 代码 例如 html ul li item1 li li item2 li echo htmlClean html Outputs ul li item1 li l
  • MySQL 5.5 分区表(按 A-Z)

    据我了解 从 MySQL 5 5 开始 您现在可以按非整数值 例如 varchar 对表进行分区 我有一个表 在其中对单个 varchar 列执行大量查找 因此出于性能原因我想对其进行分区 在所有情况下 列的值都是单个字母单词 严格小写 a
  • 在一个线程上创建的 C# 控件不能成为另一线程上控件的父级

    我正在运行一个线程 该线程获取信息并创建标签并显示它 这是我的代码 private void RUN Label l new Label l Location new Point 12 10 l Text Some Text this Co
  • 证书的 Azure Function Key Vault 参考?

    我正在尝试按照所述在我的 Azure Function v1 中使用 Key Vault 引用here 它适用于秘密 但不适用于证书 这些文档根本没有提到证书 所以也许它们根本不受支持 我希望将其作为 Base64 字符串获取 我正在使用的
  • 比较 groovy 中的 null 和 number

    为什么 Groovy 中以下情况成立 0 gt null 是选择的结果还是compareTo 实现的结果 我正在使用 Groovy 2 0 5 在 Groovy 中null是最低可能的元素 所以一切都是 gt null assert tim
  • 使用 Cocoa-Touch 播放文档目录中下载的视频

    我试图让我的应用程序播放已下载到文档目录的视频文件 我知道该文件正在下载 但我似乎无法播放该文件 这是我的代码 IBAction play NSArray paths NSSearchPathForDirectoriesInDomains
  • 将多个字符串替换为多个其他字符串

    我正在尝试用多个其他单词替换字符串中的多个单词 该字符串是 我有一只猫 一只狗和一只山羊 然而 这不会产生 我有一只狗 一只山羊和一只猫 而是产生 我有一只猫 一只猫和一只猫 在JavaScript中是否可以同时用多个其他字符串替换多个字符