Javascript заменяет все на регистр нечувствительным и сохраняет правильный регистр в оригинальной строке

Моя проблема в том, что я хочу сделать что-то вроде этого:

Javascript vaja => <b>Ja</b>vascript va<b>ja</b> i.e у меня есть строка запроса (ja), и я хочу заменить все события (не чувствительные к регистру) этой строки запроса в большей строке (Javascript vaja).

Ближайшее решение, которое я имею прямо сейчас:

"Javascript vaja".replace(/ja/gi, '<b>ja</b>');

который дает мне:

"<b>ja</b>vascript va<b>ja</b>"

но мне нужно:

Javascript vaja => <b>Ja</b>vascript va<b>ja</b>

одно решение, которое я имею в виду, - это сохранить индексы букв вверх до замены, а затем заменить их. Но это слишком хаки. Я уверен, что я не первый, кто пытается это сделать, и уверен, что там есть какое-то элегантное и более простое решение.