Yep, Y_Less is spot on. They are all being replaced, it's just that you're only seeing the last one, and they are not all applied to the same string.
var inStr ="Bob likes (Bob) but he (Bob) saw Bob today. I will call Bob and tell him (Bob) to come tomorrow.";
var oldWordArr = ["i","will","call","Bob"];
var newWordArr = ["you","must","telephone","John"];
for (var i = 0; i < 4; i++){
var regExpObj = new RegExp("([^(]|^)"+oldWordArr[i]+"([^)]|$)", "ig");
inStr = inStr.replace(regExpObj, "$1"+newWordArr[i]+"$2");
}
document.f1.t1.value = inStr;
You can see the short way of making an array, I removed an unnecessary variable (technically you don't need regExpObj either, but it's clearer with it), and I added back in the $1 and $2. You can also see that I apply all the changes to the same string, what you did, and what Y_Less said, is do them all on the original string, and then overwrite the result.