Вот вроде что-то начало выходить, может
поправите что не так и где можно что-то улучшить Задачу я чуток расширил, и теперь можно разрядность указывать при обрезке символов (собственно поэтому и пошел путем регулярных выражений)
[
'gd00.55...dgfdg',
'gd0055dgfdg',
'a252.25a',
'a25225a',
'a252,25a',
'252,25a',
'a252,250',
'-d--252,2534567',
'',
'aaa',
'0',
].forEach( input => {
// Добавлены слеши для экранирования, выражение - RegExp('...').toString()
const scale = 1;
const regExp = `(-?\\d+)([.,]${ scale ? '\\d{1,' + scale + '}' : '' })?`;
const result = +( new RegExp(regExp).exec(input) || ['0'] )[0].replace(',', '.');
console.log( '"%s" → [ %s ]', input, result );
});
"gd00.55...dgfdg" → [ 0.5 ]
"gd0055dgfdg" → [ 55 ]
"a252.25a" → [ 252.2 ]
"a25225a" → [ 25225 ]
"a252,25a" → [ 252.2 ]
"252,25a" → [ 252.2 ]
"a252,250" → [ 252.2 ]
"-d--252,2534567" → [ -252.2 ]
"" → [ 0 ]
"aaa" → [ 0 ]
"0" → [ 0 ]