Чередуйте набор символов с (?!^)-
(отрицательный взгляд на начало строки, за которым следует -
):
const val = "-12,3asd45,we-678.90"
console.log(val.replace(/[^0-9.-]|(?!^)-/g, ''));
Чтобы дополнительно удалить все десятичные дроби, кроме первого, сопоставьте все после первого .
в группе и используйте функцию обратного вызова для замены всех периодов в этой группе пустымистрока:
const val = "-12,3asd45,we-678.90.0.0.0"
const value = val
.replace(/[^0-9.-]|(?!^)-/g, '')
.replace(/^([^.]*\.)(.*)/, (_, g1, g2) => g1 + g2.replace(/\./g, ''));
console.log(value);