Используй онлайн тестер:
Например.
И старайся упрощать... а не усложнять.
function getStrongText(value) {
var str = 'Hello world hello123',
regex = new RegExp(value, "gi");
return str.replace(regex, '<strong>$&</strong>');
}
console.log(getStrongText('Hello'));
Если нужно искать только слова, а не части слов то нужно делать слегка иначе.
function getStrongText(value) {
var str = 'Hello, world hello123',
pattern = "(\s|^)"+value+"(\W|\s|$)",
regex = new RegExp(pattern, "gi");
return str.replace(regex, "$1<strong>$2</strong>$3");
}
console.log( getStrongText('hello') );
В твоем примере замена производилась трёх значений. $& значит все найденные субпатерны в одной итерации, а у тебя три субпатерна.
<strong>$&</strong> все равно, что <strong>$1$2$3</strong>