You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript获取字符串替换操作中的替换部分?

嘿,这个需求很清晰,我来帮你修改函数,让它返回你想要的实际变更部分!

核心思路

你要的其实是对比被替换的原片段和新替换的内容,找出两者之间真正不一样的字符(比如你举的例子里,"ir"换成"er",只有第一个字符从"i"变成"e",所以返回"e")。

调整后的代码

function str_replace(str, part_to_replace, replace_with) {
  // 先处理边界情况:如果要替换的片段是空,或者原字符串里找不到它,直接返回空字符串
  if (!part_to_replace || str.indexOf(part_to_replace) === -1) {
    return '';
  }

  let changedChars = '';
  // 遍历原片段的每个字符位置,逐个对比替换内容的对应字符
  for (let i = 0; i < part_to_replace.length; i++) {
    const originalChar = part_to_replace[i];
    // 如果替换内容比原片段短,超出的位置按空字符处理
    const newChar = replace_with[i] || '';

    // 只有当字符不一样时,才把新字符加入结果
    if (originalChar !== newChar) {
      changedChars += newChar;
    }
  }

  // 额外处理:如果替换内容比原片段长,超出的部分属于新增,也算变更
  if (replace_with.length > part_to_replace.length) {
    changedChars += replace_with.slice(part_to_replace.length);
  }

  return changedChars;
}

测试你的示例

当你调用str_replace("amir", "ir", "er")时:

  1. 找到原字符串里的"ir"片段
  2. 对比每个字符:"i" vs "e"(不一样,把"e"加入结果);"r" vs "r"(一样,跳过)
  3. 最终返回"e",完全符合你的要求!

其他场景的表现

  • 如果替换内容比原片段长(比如str_replace("amir", "ir", "ert")),超出的"t"会被视为新增的变更,返回"et"
  • 如果原字符串里找不到要替换的片段,或者要替换的片段是空,函数返回空字符串
  • 如果替换内容比原片段短(比如str_replace("amir", "ir", "e")),原片段末尾的"r"被替换成空,这部分差异也会被计算,最终返回"e"

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:51