Первый код не работает, потому что это строка, а не регулярное выражение, поэтому необходимо использовать объект RegExp для работы
//Had to use RegExp to make it work
var name = "x.y.myList[0].test";
var regEx2 = new RegExp("myList\\[[0-9]\\]", "gi");
alert(name.replace(regEx2 , function (x) { return 'myList[' + 1 + ']'}));
Второй код работает, потому что это регулярное выражение