Вы можете передать метод replace функцию заменителя. Первым аргументом для которого является полное совпадение, вторым будет 1 доллар. Таким образом:
mystring.replace(/<([\w]+)[^>]*>.*?<\/\1>/, function(a,x){
return a.replace(x,x.toUpperCase());
})
хотя эта форма сохраняет дополнительную операцию, делая дополнительный захват (должен быть быстрее, но не проверен):
mystring.replace(/<([\w]+)([^>]*>.*?<\/\1>)/, function(a,x,y){
return ('<'+x.toUpperCase()+y);
})