javascript 正则(将数字转化为三位分隔的样式)【转】
原文:https://www.cnblogs.com/sivkun/p/7123963.html
''.replace(/\B(?=(?:\d{})+\b)/g, ',')
解释:
\b : 匹配单词边界,就是位于字符\w([a-zA-Z0-9_])和\W[^a-zA-Z0-9_]之间的位置,或者位于字符\w和字符串的开头或者结束之间的位置。
\B : 匹配非单词边界
var reg = /\b\d/g;
var str = '';
reg.exec(str);//["1",index:0,input:"123"]
reg.exec(str);//null reg = /\d\b/g;
reg.exec(str);//["3",index:2,input:"123"]
reg.exec(str);//null reg = /\B\d/g;
reg.exec(str);//["2", index: 1, input: "123"]
reg.exec(str);//["3", index: 2, input: "123"]
reg.exec(str);//null reg = /\d\B/g;
reg.exec(str);//["1", index: 0, input: "123"]
reg.exec(str);//["2", index: 1, input: "123"]
reg.exec(str);//null
通过上面代码可以理解\b和\B到底是什么玩意了。
`(?:exp)`:正则表达式中小括号具有分组和捕获双重作用,如果在小阔号里面开始加上`?:`则可以使其不被捕获。
`exp1(?=exp2)`:正向前瞻(零宽正向先行断言,零宽的意思是(?=exp2)不占据位置,只是表示一个期望),要匹配的exp1要满足后面是exp2
`exp1(?!exp2)`:负向前瞻(零宽负向先行断言),要匹配的exp1要满足后面是不是exp2
var str = '你好吗 你好啊 你好呀';
var reg = /好(?=啊)/g;
reg.exec(str);//["好", index: 5, input: "你好吗 你好啊 你好呀"]
reg.exec(str);//null
reg = /好(?!啊)/;
reg.exec(str);//["好", index: 1, input: "你好吗 你好啊 你好呀"]
reg.exec(str);//["好", index: 9, input: "你好吗 你好啊 你好呀"]
reg.exec(str);//null
//说明一下零宽,下面这个正则表示`你`的后面要紧跟着`好`才能匹配,期望后面是`好`!
//但是后面紧跟着一个`\d`,理解的时候把`(?=好)`忽略(因为是零宽,不占据位置),
//这就表示在`你`的后面要跟一个数字才能匹配,这就跟上面那个期望相互矛盾,
//因此这个正则不会匹配任何字符串。
reg = /你(?=好)\d/;
reg.exec(str);//null
reg.test(str);//false
reg.test('你好');//false
reg.test('你好1');//false
reg.test('你1好');//false
再看`/\B(?=(?:\d{3})+\b)/g`什么意思
1. 首先是全局匹配
2. 匹配非单词边界
3. 非单词边界后面有(连续3的整数被个数字加单词边界)
4. 连续的数字不会被捕获
`'123456789'.replace(/\B(?=(?:\d{3})+\b)/g, ',')`
执行过程:
replace函数会进行多次匹配,\b表示了要匹配到单词边界。
1. 首先从1和2中间开始但是后面有8个数字不满足前瞻性条件
2. 然后到2和3中间,同样不满足
3. 到3和4中间,满足后面有6个数字
4. 把在3和4中间的\B(非单词边界)替换为","。
5. 依次往下匹配替换
6. 最终返回新的字符串"123,456,789" 正则很强大,比常规的实现方法简洁方便很多。
javascript 正则(将数字转化为三位分隔的样式)【转】的更多相关文章
- javascript 正则(将数字转化为三位分隔的样式)
'12345678912345678'.replace(/\B(?=(?:\d{3})+\b)/g, ',') 解释: \b : 匹配单词边界,就是位于字符\w([a-zA-Z0-9_])和\W[^a ...
- JS将数字转换成三位逗号分隔的样式
function formatNum(num) { if(!/^(\+|-)?(\d+)(\.\d+)?$/.test(num)){alert("wrong!"); return ...
- E - Leading and Trailing 求n^k得前三位数字以及后三位数字,保证一定至少存在六位。
/** 题目:E - Leading and Trailing 链接:https://vjudge.net/contest/154246#problem/E 题意:求n^k得前三位数字以及后三位数字, ...
- C++中double类型的数字如何保留三位小数点详解
我们知道C语言中,如果要求输出结果保留三位小数,我们可以使用pritf()函数轻松的解决.但是C++的输出运算符<<并没有直接实现这个功能,怎么办呢?之前在找答案的过程中各路大神给出了千姿 ...
- 把一串数字表示成千位分隔形式——JS正则表达式的应用
梳理思路 要先明白的是,我们将要转换成的数字格式是这样:从个位往左数起,每三位前插入一个千位分隔符,,即可以想象成我们要把每三位数字前面的那个空""匹配出来,并替换成千位分隔符,. ...
- JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等
验证是否为数字:/^[0-9]*$/验证是否为汉字:/^[\u4e00-\u9fa5],{0,}$/验证x-y位的数字:/^\d{x,y}$/验证由26个英文字母组成的字符串:/^[A-Za-z]+$ ...
- js 格式化数字(每三位加逗号)
// 方法一 unction toThousands(num) { var result = [ ], counter = 0; num = (num || 0).toString().split(' ...
- JS格式化数字(每三位加逗号)
function toThousands(num) { var num = (num || 0).toString(), result = ''; //判断是否带小数点 if (num.split(' ...
- 把一串数字表示成千位分隔形式——toLocaleString()
听说你用什么正则?我这有个骚操作了解下.. toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串. ().toLocaleString('en-US') " ...
随机推荐
- Java配置分离之Spring远程配置
访问我的博客 前言 集群应用的配置文件如果写在项目的 resources 目录下面,当遇到需要修改某一个配置值时,需要将集群的所有应用的配置信息进行修改,并且将机密的配置信息比如数据库账号密码如果不进 ...
- div或其他html控件的overflow使用滚动条
在编写html代码时, 有时候不想把控件撑大,滚动条就是个不错的选择 如下代码 <div style="height:auto !important;max-height:58px;o ...
- Maven 进阶
一.Maven 版本管理 Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本> 开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆 ...
- Java 8 新特性-菜鸟教程 (3) -Java 8 函数式接口
Java 8 函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为lambda表达式. 函数式接 ...
- 【learning】多项式开根详解+模板
概述 多项式开跟是一个非常重要的知识点,许多多项式题目都要用到这一算法. 用快速数论变换,多项式求逆元和倍增法可以在$O(n log n)$的时间复杂度下求出一个$n$次多项式的开根. 前置技能 快速 ...
- Silverlight 查询DataGrid 中匹配项 ,后台改变选中行颜色
需求:根据关键字(参会人号码或名称)查找参会人,在datagird 中高亮显示 界面:我在界面上增加了一个文本框和按钮,进行查找操作 操作说明: 根据关键字进行搜索:输入关键字 点击查找,如果找到 以 ...
- [转]ASP.NET 核心模块配置参考
本文转自:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore ...
- Linux下安装SQL Server 2016(安装篇SQL Server on linux)
安装过程 如何安装直接参考这个文章:安装sql server 整个安装过程非常简单. 上面的文档里是通过 sudo 命令,用root身份来执行,不过这里为了简单,就用root账号来安装的. (1)下载 ...
- 月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer
事先声明,这篇文章很没有营养,大家当笑话看就好,不要搞骂战污染博客园了谢谢. 背景: .NET(以下简称N)心里想:现在企业级应用.NET用的少,但起码.net的语法特性优美,IDE宇宙最强吧,啧啧. ...
- Mac下,(OS系统)IDEA 逆向工程,生成 hibernate 映射文件以及对应的javaBean(类似于eclipse)
找了好久,逆向工程生成javabean的,在Macbook的OS系统下使用idea生成. 参考博客:http://m.blog.csdn.net/quan20111992/article/detail ...