Remplacer des mots dans un texte en gardant la capitalisation

J'ai eu besoin de rempalcer des mots dans un texte par un autre mot, tout en gardant la capitalisation.

Avec le texte :
"It is a good burger. Or an hamburger. Burger is good".

On doit obtenir :
"It is a good sandwich. Or an hamburger. Sandwich is good".

Voici :
var replace = function(text, r, v) {
return text.replace(new RegExp('([^a-z])('+r+')|(^'+r+')(?=[^a-z]?)', "gi"), function(match, p1, p2, p3, offset, string) {
p1 = p1 || '';
p2 = p2 || p3;
if (p2[0].toUpperCase() == p2[0]) {
// Assume its all caps.
if (p2[1].toUpperCase() == p2[1]) {
v = v.toUpperCase();
}
// Assume its capitalized.
else {
v = v[0].toUpperCase() + v.slice(1);
}
}
return p1 + v;
});
}

Testons :
var text = "It is a good burger. Or an hamburger. Burger is good";
console.log(text + "\n" + replace(text, 'burger', 'sandwich'));