Ваш шаблон (^.{5})(.{5}$)
не соответствует, так как он должен точно соответствовать 10 символам.
Вместо этого вы можете использовать чередование |
, чтобы сопоставить либо 5 символов в начале, либо 5 символов в конце строка. Обратите внимание, что для замены вам не нужны группы захвата.
str.replace(/^.{5}|.{5}$/
let s = "abcdefgh@abcdefgh.com";
const strRe = str => str.replace(/^.{5}|.{5}$/gi, '*****');
console.log(strRe(s));