|
36
|
| Brandon Montgomery · 技术社区 · 16 年前 |
|
|
1
128
这可以在单个正则表达式中完成,无需迭代。如果您的浏览器支持ECMAScript 2018,您可以简单地使用lookaround并在正确的位置插入逗号:
寻找
在旧版本中,JavaScript不支持lookbehind,因此这不起作用。幸运的是,我们只需要改变一点点:
寻找
说明:断言从字符串中的当前位置开始,可以以三的倍数匹配数字,并且当前位置的左边有一个数字。 这也适用于小数(123456.78),只要“点的右边”没有太多的数字(否则会得到123456.789012)。 您还可以在数字原型中定义它,如下所示:
然后像这样使用它:
|
|
|
2
19
用一行代码就可以优雅地处理数字格式。
代码:
工作原理
正则表达式使用前瞻查找字符串中的位置,在该位置右侧唯一的一个或多个由三个数字组成的分组,直到遇到十进制或字符串结尾。这个
发现的概念 为了在不删除任何字符的情况下拆分字符串,重要的是在字符串内,而不是匹配实际字符。 用法示例:
当然,代码可以很容易地进行扩展或更改以处理区域设置问题。例如,下面是一个新版本的代码,它自动检测语言环境设置并替换逗号和句点的使用。 区域设置感知版本:
|
|
|
3
4
//您可能需要考虑小数
var n=1000000000.34;
|
|
|
4
4
有一个警告
其他使用正则表达式的答案都是十进制数(尽管作者似乎不知道这一点,因为他们只测试了1或2位小数)。这是因为如果没有lookbehind,JS正则表达式就无法知道您使用的是小数点之前还是之后的数字块。这就留下了两种使用JS正则表达式解决此问题的方法:
|
|
|
5
3
试试这个 |
|
|
6
3
underscore.string 有 a nice implementation . 我稍微修改了它以接受数字字符串。
|
|
7
1
如果确实需要正则表达式,可以在while循环中使用两个:
如果你想成为一名花花公子,你也可以用小数点格式化数字:
编辑: 您也可以使用2个正则表达式,而不使用循环、拆分、联接等:
如果剩余的数字可以被三整除,则第一个正则表达式会在前1或2位后面加一个逗号。第二个正则表达式在剩下的每一组3位数字后面加一个逗号。
测试输出:
|
|
|
8
1
有人提到在Javascript RegExp中不可能使用lookbehind。这是一个很好的页面,解释了如何使用lookaround(向前看和向后看)。 |
|
|
9
0
试着这样做:
|
|
|
10
0
我认为您必须通过多次传递才能使用正则表达式实现这一点。请尝试以下操作:
|
|
|
11
0
迭代是不必要的
结果
|
|
|
12
0
首先反转一个字符数组,然后在每三个数字后面添加逗号,除非它正好在字符串末尾或-符号之前。然后再次反转字符数组并使其再次成为字符串。
|
|
|
13
0
布兰登, 从小数点开始,我没有看到太多的答案在正则表达式中起作用,所以我想我可能会插话。
|
|
|
14
0
经过这么多的搜索,我生成了一个接受所有格式的正则表达式
|
|
ttruhcheva · 如何在Power BI中创建灵活的数据标签? 3 年前 |
|
|
M.Walko · 在降价中更改ATX标题的字体大小 8 年前 |
|
|
Adam Waring · Bootstrap 4容器的文本包装 8 年前 |
|
|
Jamie Wilson · 打印文本文件(Python) 8 年前 |
|
|
new2Ubuntu · 在Python3中打印格式化的浮点列表 8 年前 |
|
|
Reilly Ford · 使用导航栏+页面选项卡格式化问题 8 年前 |