Определите регулярное выражение для тысячи разделителей без десятичных и алфавитов - PullRequest
0 голосов
/ 07 июня 2018

У меня есть регулярное выражение / \ B (? = (\ D {3}) + (?! \ D)) / g, которое форматирует число в разделитель тысяч.Например, когда вы вводите 752892, это дает мне 752 892.Я хочу добавить к этому регулярному выражению, чтобы не разрешать десятичное значение и алфавиты.Как мы можем достичь этого.

const THOUSANDS_SEPARATOR = ','
let  i= (value || '').toString();
    i= integer.replace(/\B(?=(\d{3})+(?!\d))/g, this.THOUSANDS_SEPARATOR);

1 Ответ

0 голосов
/ 07 июня 2018

Этот хитрый.Возможное решение состоит в добавлении плохих случаев в пропущенное чередование.

Один из способов сделать это - использовать глаголы управления возвратом * 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);
...