首页 > 编程笔记 > JavaScript笔记 > JS正则表达式
JS正则表达式匹配货币数字
英文的货币数字采用的是千位分隔符格式,如“12345678”表示为“12,345,678”。下面我们分步讲解如何书写正则表达式。
1) 根据千位把相应的位置替换成“,”,以最后一个逗号为例。解决方法:(?=\d{3}$)。
2) 确定所有的逗号。因为逗号出现的位置,要求后面 3 个数字一组,也就是 \d{3} 至少出现一次。此时可以使用量词 +:
3) 匹配其余数字,会发现问题如下:
4) 匹配开头可以使用 ^,但要求该位置不是开头,可以考虑使用 (?!^)。实现代码如下:
5) 如果要把“12345678 123456789”替换成“12,345,678 123,456,789”,此时需要修改正则表达式,可以把里面的开头
6) 进一步格式化。千分符表示法一个常见的应用就是货币格式化。例如:
1) 根据千位把相应的位置替换成“,”,以最后一个逗号为例。解决方法:(?=\d{3}$)。
var result = "12345678".replace(/(?=\d{3}$)/g, ','); console.log(result); //“12345,678”其中 (?=\d{3}$) 匹配 \d{3}$ 前面的位置,而 \d{3}$ 匹配的是目标字符串最后 3 为数字。
2) 确定所有的逗号。因为逗号出现的位置,要求后面 3 个数字一组,也就是 \d{3} 至少出现一次。此时可以使用量词 +:
var result = "12345678".replace(/(?=(\d{3}) + $)/g, ','); console.log(result); //“12,345,678”
3) 匹配其余数字,会发现问题如下:
var result = "123456789".replace(/(?=(\d{3}) + $)/g, ','); console.log(result); //“,123,456,789”因为上面的正则表达式,从结尾向前数,只要是 3 的倍数,就把其前面的位置替换成逗号。那么如何解决匹配的位置不能是开头呢?
4) 匹配开头可以使用 ^,但要求该位置不是开头,可以考虑使用 (?!^)。实现代码如下:
var regex= /(?!^)(?=(\d{3}) + $)/g; var result = "12345678".replace(regex, ','); console.log(result); result = "123456789".replace(regex, ','); console.log(result);
5) 如果要把“12345678 123456789”替换成“12,345,678 123,456,789”,此时需要修改正则表达式,可以把里面的开头
^
和结尾$
修改成 \b。实现代码如下:
var string = "12345678 123456789"; regex = /(?!\b)(?=(\d{3}+\b))/g; var result = string.replace(regex, ','); console.log(result); //"12,345,678 123,456,789"其中 (?!\b) 要求当前是一个位置,但不是 \b 前面的位置,其实 (?!\b) 说的就是 \B。因此最终正则变成了:/\B(?=(\d{3})+\b)/g。
6) 进一步格式化。千分符表示法一个常见的应用就是货币格式化。例如:
1888格式化为:
$ 1888.00有了前面的铺垫,可以很容易的实现,具体代码如下:
function format (num) { return num.toFixed(2).replace(/\B(?=(\d{3})+\b)/g, ",").replace(/^/, "$$"); }; console.log(format(1888));
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算