Я пытаюсь заменить части строки другой строкой.У меня есть начальный индекс, конечный индекс и строка, которую я пытаюсь заменить.Вот как выглядят данные:
const mentions = [{ uid: "abc", startingIndex: 0, endingIndex: 9, displayName: "John Doe" }, { uid: "xyz", startingIndex: 26, endingIndex: 30}];
let text = "@John Doe How are you? Hi @Ben Sup?"
Я пытался заменить текст @[name]
на UID в следующем формате: <@UID>
.
Итак, я придумалthis:
replaceText = (input, search, replace, start, end) => {
return (
input.slice(0, start) +
input.slice(start, end).replace(search, replace) +
input.slice(end)
);
};
replaceWithMentions = () => {
const { sendMessage } = this.props;
const { mentions } = this.state;
let { text } = this.state;
text = mentions.reduce((text, mention) => {
return this.replaceText(
text,
`@${mention.displayName}`,
`<@${mention.uid}>`,
mention.startingIndex,
mention.endingIndex
);
}, text);
sendMessage(text);
this.setState({ text: "" });
};
Но проблема в том, что, как только первое упоминание будет заменено, индекс других упомянутых изменений.В результате чего другие элементы не заменяются.Есть ли способ предотвратить это?