javascript - 用已知位置替换多个字符串
问题描述
所以我有一个这样的字符串
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);
这是愚蠢的版本,因为它只工作一次,然后下一个替换数据索引关闭。
解决方案
我不认为正则表达式是正确的工具。相反,向后迭代,例如索引 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);