为千位分隔符定义一个正则表达式,不带小数和字母

时间:2018-06-06 21:22:31

标签: regex decimal

我有一个正则表达式/ \ B(?=(\ d {3})+(?!\ d))/ g,它将数字格式化为千位分隔符。就像你输入752892一样,它给了我 752892。我想添加到这个正则表达式不允许十进制值和字母表。 我们怎样才能做到这一点。

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

1 个答案:

答案 0 :(得分:1)

这个很棘手。一种可能的解决方案是将坏的情况添加到跳过的替换中。

这样做的一种方法是使用回溯控制动词*SKIP *FAIL

.*[a-zA-Z.].*(*SKIP)(*FAIL)|\B(?=(\d{3})+(?!\d))

Demo

另一种方法是为好案例使用捕获组以及.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);