Вы можете использовать
.replace(/^([^-]*-)|-/g, '$1').replace(/[^\p{L}\s-]+/gu, '')
Он сохранит первые -
во входной строке, а также любые буквы Unicode (\p{L}
) и пробелы (\s
), потому что .replace(/^([^-]*-)|-/g, '$1')
будет соответствовать и захватывать - от начала строки - все символы, кроме -
до первого -
(с ^([^-]*-)
), а затем сопоставлять с любым другим -
в строке и заменять соответствует значению группы 1 (оно будет пустым, если -
не является первым дефисом в строке), а .replace(/[^\p{L}\s-]+/gu, '')
удалит один или несколько символов, кроме букв, пробелов и дефисов (останутся символы первый только после первой замены).
См. Демонстрационную версию ECMAScript 2018+ JS ниже:
console.log( "12-3-**(Виктор Викторович)**...".replace(/^([^-]*-)|-/g, '$1').replace(/[^\p{L}\s-]+/gu, '') )