Этот хитрый.Возможное решение состоит в добавлении плохих случаев в пропущенное чередование.
Один из способов сделать это - использовать глаголы управления возвратом * SKIP * FAIL :
.*[a-zA-Z.].*(*SKIP)(*FAIL)|\B(?=(\d{3})+(?!\d))
Демо
Другой способ - использовать группу захвата для хороших случаев вместе с обратным вызовом .replace
.
Вот пример JavaScript, который показывает, как он работает со вкусом регулярных выражений, который не поддерживает эти глаголы возврата:
const regex = /.*[a-zA-Z.].*|\B(?=(\d{3})+(?!\d))/gm;
const str = `
123
1234
12345
752892
Bad
123123456.000000
12a3123456.0000000000
123456.12345a12345`;
const result = str.replace(regex, function(m, group1) {
if (group1) return ",";
return "invalid";//m;
});
console.log('Substitution result: ', result);