首页 > 解决方案 > 用已知位置替换多个字符串

问题描述

所以我有一个这样的字符串

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do

并有这样的替换数据 replace1: 0-5,10-15 replace2: 30-33,40-43

意思是用“replace1”替换0-5的所有字符然后用“replace1”替换字符10-15

还将 30-33 替换为“replace2”等。

我将如何以最好的方式做到这一点?我唯一的想法是每次替换某些东西时重新计算索引。否则,当我在字符串中插入一些东西时,它会使替换数据无效,因为索引不同。

我正在尝试在 javascript 中实现这一点。

message = message.substring(0, start) + replacement + message.substring(end + replacement.length);

这是愚蠢的版本,因为它只工作一次,然后下一个替换数据索引关闭。

标签: javascriptstring

解决方案


我不认为正则表达式是正确的工具。相反,向后迭代,例如索引 40-43,然后是索引 30-33 等,随时替换:

let str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do';
const replacements = [
  [0, 5, 'replace1'],
  [10, 15, 'replace2'],
  [30, 33, 'replace3'],
  [40, 43, 'replace4'],
];
for (const [start, end, replacement] of replacements.reverse()) {
  str = str.slice(0, start) + replacement + str.slice(end);
}
console.log(str);


推荐阅读