пока так вариант с неавтоматическим шаблоном...
var str = "Ну что сказать? -12.85 - это отрицательное число, а 0.86 - положительное";
function r(v,s) {
return v.replace(s, function(...f) {
return `${f[1]}<span class=P1>${f[2]}</span><span class=P2>${f[3]}</span>`
});
}
str = r(str, /([^-\d.])(\d+)(\.\d+)?/g);
alert(str);