regex - 为没有小数点和字母的千位分隔符定义正则表达式
问题描述
我有一个正则表达式 /\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);
解决方案
这个很棘手。一种可能的解决方案是将坏情况添加到被跳过的交替中。
一种方法是使用回溯控制动词*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);
推荐阅读
- mysql - MySQL中的HANDLER是如何实现的?
- haskell - 如何从目录中读取所有文件名?
- database - 如何使用 Eventbrite 的 API 将我的所有活动数据、与会者等加载到 Google 表格中?
- javascript - 如何仅使用纯 Javascript 创建像 Grammaly 这样的工具提示?
- javascript - Vue 渲染 span 作为列表的一部分
- networking - 路由器的主机优先级是否高于交换机/计算机?
- firebase - 如何更改 Google Analytics 集成?
- c++ - 通过引用的可变模板参数
- html - 输入类型日期和输入类型时间在 Firefox 中破坏了 UI
- reactjs - 我的组件在什么情况下会在 React-router 下重新加载,什么时候会触发这些 useEffect 函数?