Понятно, что совершенно универсальное выражение написать невозможно :) Но примерно так можно это сделать для такого формата и номеров с различной длиной кода (+7, +34, да сколько угодно в общем-то):
Написано на ES6, но изменения для ES5 минимальны
"use strict";
const number = "39091111111"; //тут неотформатированное значение
const pattern = new RegExp(`(^\\d{${number.length % 10}})(\\d{3})(\\d{3})(\\d{2})(\\d{2}$)`);
const formattedNumber = number.replace(pattern, '+$1($2)$3-$4-$5');
console.log(formattedNumber); //выведет +3(909)111-11-11