Это функция, которую вы, вероятно, не должны изобретать, но ... если вы не хотите использовать регулярные выражения, тогда вы можете попробовать такую функцию.
const replaceTokensWithTags = (str, token, tag) => {
return str.split(token).map((v, index) => {
return index % 2 ? tag + v + (tag[0] + '/' + tag.slice(1)): v;
}).join('');
}
replaceTokensWithTags("I am also using **tokens** index to **find** where in the text I need to make a change so I can't use regex", '**', '<b>');
// becomes: "I am also using <b>tokens</b> index to <b>find</b> where in the text I need to make a change so I can't use regex"
replaceTokensWithTags("I am also using [b]tokens[b] index to [b]find[b] where in the [b]text I need[b] to make a change so I can't use regex", '[b]', '<b>');
becomes: "I am also using <b>tokens</b> index to <b>find</b> where in the <b>text I need</b> to make a change so I can't use regex"