1. '12345678912345678'.replace(/\B(?=(?:\d{3})+\b)/g, ',')

解释:

\b : 匹配单词边界,就是位于字符\w([a-zA-Z0-9_])和\W[^a-zA-Z0-9_]之间的位置,或者位于字符\w和字符串的开头或者结束之间的位置。

\B : 匹配非单词边界

  1. var reg = /\b\d/g;
  2. var str = '123';
  3. reg.exec(str);//["1",index:0,input:"123"]
  4. reg.exec(str);//null
  5.  
  6. reg = /\d\b/g;
  7. reg.exec(str);//["3",index:2,input:"123"]
  8. reg.exec(str);//null
  9.  
  10. reg = /\B\d/g;
  11. reg.exec(str);//["2", index: 1, input: "123"]
  12. reg.exec(str);//["3", index: 2, input: "123"]
  13. reg.exec(str);//null
  14.  
  15. reg = /\d\B/g;
  16. reg.exec(str);//["1", index: 0, input: "123"]
  17. reg.exec(str);//["2", index: 1, input: "123"]
  18. reg.exec(str);//null

通过上面代码可以理解\b和\B到底是什么玩意了。

  1. `(?:exp)`:正则表达式中小括号具有分组和捕获双重作用,如果在小阔号里面开始加上`?:`则可以使其不被捕获。
    `exp1(?=exp2)`:正向前瞻(零宽正向先行断言,零宽的意思是(?=exp2)不占据位置,只是表示一个期望),要匹配的exp1要满足后面是exp2
    `exp1(?!exp2)`:负向前瞻(零宽负向先行断言),要匹配的exp1要满足后面是不是exp2
  1. var str = '你好吗 你好啊 你好呀';
  2. var reg = /好(?=啊)/g;
  3. reg.exec(str);//["好", index: 5, input: "你好吗 你好啊 你好呀"]
  4. reg.exec(str);//null
  5. reg = /好(?!啊)/;
  6. reg.exec(str);//["好", index: 1, input: "你好吗 你好啊 你好呀"]
  7. reg.exec(str);//["好", index: 9, input: "你好吗 你好啊 你好呀"]
  8. 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
  1.  
  1. 再看`/\B(?=(?:\d{3})+\b)/g`什么意思
    1. 首先是全局匹配
    2. 匹配非单词边界
    3. 非单词边界后面有(连续3的整数被个数字加单词边界)
    4. 连续的数字不会被捕获
  1. `'123456789'.replace(/\B(?=(?:\d{3})+\b)/g, ',')`
    执行过程:
    replace函数会进行多次匹配,\b表示了要匹配到单词边界。
    1. 首先从12中间开始但是后面有8个数字不满足前瞻性条件
    2. 然后到23中间,同样不满足
    3. 34中间,满足后面有6个数字
    4. 把在34中间的\B(非单词边界)替换为","
    5. 依次往下匹配替换
    6. 最终返回新的字符串"123,456,789"
  2.  
  3. 正则很强大,比常规的实现方法简洁方便很多。
  1.  

javascript 正则(将数字转化为三位分隔的样式)的更多相关文章

  1. javascript 正则(将数字转化为三位分隔的样式)【转】

    原文:https://www.cnblogs.com/sivkun/p/7123963.html })+\b)/g, ',') 解释: \b : 匹配单词边界,就是位于字符\w([a-zA-Z0-9_ ...

  2. JS将数字转换成三位逗号分隔的样式

    function formatNum(num) { if(!/^(\+|-)?(\d+)(\.\d+)?$/.test(num)){alert("wrong!"); return ...

  3. E - Leading and Trailing 求n^k得前三位数字以及后三位数字,保证一定至少存在六位。

    /** 题目:E - Leading and Trailing 链接:https://vjudge.net/contest/154246#problem/E 题意:求n^k得前三位数字以及后三位数字, ...

  4. C++中double类型的数字如何保留三位小数点详解

    我们知道C语言中,如果要求输出结果保留三位小数,我们可以使用pritf()函数轻松的解决.但是C++的输出运算符<<并没有直接实现这个功能,怎么办呢?之前在找答案的过程中各路大神给出了千姿 ...

  5. 把一串数字表示成千位分隔形式——JS正则表达式的应用

    梳理思路 要先明白的是,我们将要转换成的数字格式是这样:从个位往左数起,每三位前插入一个千位分隔符,,即可以想象成我们要把每三位数字前面的那个空""匹配出来,并替换成千位分隔符,. ...

  6. JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等

    验证是否为数字:/^[0-9]*$/验证是否为汉字:/^[\u4e00-\u9fa5],{0,}$/验证x-y位的数字:/^\d{x,y}$/验证由26个英文字母组成的字符串:/^[A-Za-z]+$ ...

  7. js 格式化数字(每三位加逗号)

    // 方法一 unction toThousands(num) { var result = [ ], counter = 0; num = (num || 0).toString().split(' ...

  8. JS格式化数字(每三位加逗号)

    function toThousands(num) { var num = (num || 0).toString(), result = ''; //判断是否带小数点 if (num.split(' ...

  9. 把一串数字表示成千位分隔形式——toLocaleString()

    听说你用什么正则?我这有个骚操作了解下.. toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串. ().toLocaleString('en-US') " ...

随机推荐

  1. 深入认识AsyncTask

    1.概述 在android开发中是采用单线程模型,主线程通常称为UI线程,由于UI线程的操作不是线程安全的,因此android规定有关更新界面的操作必须在主线程中进行,其他线程直接报错. 如果我们把所 ...

  2. AngularJS进阶(十)AngularJS改变元素显示状态

    AngularJS改变元素显示状态 前言 本文描述使用AngularJS提供的ng-show和ng-hide指令实现自动监听某布尔型变量来改变元素显示状态. 控制html元素显示和隐藏有n种方法:ht ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  4. Android开发常用网站汇总

    1.eoe Android开发者论坛 目前国内最早的Android开发者社区,人气非常旺聚集了不少Android开发方面的高手,开发中遇到的问题大都能在这里获得解决,网站最大的特色是定期发布<e ...

  5. utl_file包的使用

    首先看一下oracle 脚本 /* # $Header: HTMomse12.sql 12.0.4 20121015 Support $ #+============================= ...

  6. 网站开发进阶(十三)window.onload用法详解

    window.onload用法详解 网页中的javaScript脚本代码往往需要在文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,为了避免这种情况的发生,可以使用以下两种方式: 一.将脚本 ...

  7. DES

     本文对DES的介绍部分摘自博文DES加密算法的C++实现,具体实现则由自己完成. 另外,DES的官方文档链接见这里,在维基百科上也有比较详细的介绍.不过,DES已经被证明是不安全的(可见于RSA公司 ...

  8. ubuntu下搭建gtk+编程环境

    首先gtk+项目主页为: http://www.gtk.org/ gtk+现在有2和3两种版本,使用 sudo apt-get install gnome-core-devel 可以一次性安装2个版本 ...

  9. myBatis源码学习之SqlSessionFactory

    上一篇博客 SqlSessionFactoryBuilder 中介绍了它的作用就是获得DefaultSqlSessionFactory SqlSessionFactory是一个接口,其具体实现类是De ...

  10. javac编译同一个包内的java文件

    问题描述:包a.b.c里有d.java e.java f.java三个文件,其中d中包含main. 错误: 第一种:javac d.java 报错:里面用到其他类,找不到 第二种:javac *.ja ...