С двумя заменами:
console.log("a12b3.1&23.0a2x".replace(/[^.\d]/g, '')
.replace(/^(\d*\.?)|(\d*)\.?/g, "$1$2"));
Первое действие удалит все символы, кроме цифр и точек
Вторая замена соответствует последовательности цифр, за которой, возможно, следует точка, но это происходит двумя разными способами. Когда такая последовательность происходит в начале строки, необязательная точка помещается внутри первой группы захвата, в то время как для всех других совпадений точка является вне (второй) группы захвата .
Существует две группы захвата, но для любого данного совпадения только одна из них будет иметь контент. Таким образом, захваченный контент может быть воспроизведен в любом случае с $1$2
. Это будет включать в себя первый пункт, но исключить любой другой.