如何用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")时:
- 找到原字符串里的
"ir"片段 - 对比每个字符:
"i"vs"e"(不一样,把"e"加入结果);"r"vs"r"(一样,跳过) - 最终返回
"e",完全符合你的要求!
其他场景的表现
- 如果替换内容比原片段长(比如
str_replace("amir", "ir", "ert")),超出的"t"会被视为新增的变更,返回"et" - 如果原字符串里找不到要替换的片段,或者要替换的片段是空,函数返回空字符串
- 如果替换内容比原片段短(比如
str_replace("amir", "ir", "e")),原片段末尾的"r"被替换成空,这部分差异也会被计算,最终返回"e"
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

