zoukankan      html  css  js  c++  java
  • /B(?=(?:d{3})+$)/g 一条令人费解的正则表达式

    网上浏览博客看到要用JavaScript正则表达式解决一个功能, 要在数字中间插入逗号, 用来表示书面的金额写法.

    JS代码是这样子的

    let test1 = '1234567890'
    let format = test1.replace(/B(?=(?:d{3})+$)/g, ',')

    里面那条正则表达式花了我一个下午去查资料, 算是补了下对于正则表达式认识上的一些漏洞, 记录下来.

    这里有几个概念: 单词边界 和 非捕获分组(non-capturing group)

    B 匹配非单词边界, 即两边都是单词 w = [0-9a-zA-Z] , 可是非单词边界太泛了, 我们需要一些限定词.

    ?= 就是一个限定词, 限定后面的字符串都是符合 (?:d{3})+$  这个规则. 这里面最难理解的应该就是 ?: 这是一个非捕获分组, 当匹配到 一个或多个 紧靠末尾 的三位数时, 这个规则生效, 但并不保存这个分组.

    因此整个的意思就是, 我要匹配单词之间的缝隙, 每个缝隙都在一个或多个 紧靠末尾 的三位数之间, 于是 12345678 匹配到的位置就会是 12 | 345 | 678. 

    你可能会问, 123456789为什么不会匹配到第一个位置呢? 因为 B 确保了这个缝隙只会位于两个单词w之间.

    以上就是全部的理解.

  • 相关阅读:
    打开LogCat以便查看日志
    sql语句优化
    IIS部署说明
    VM上Hadoop3.1伪分布式模式搭建
    C# 程序结构
    CSS笔记1:属性定位
    VS2013 添加控制台程序
    布局 Layout
    [游泳] 游泳学习课程
    "12306"台前幕后:五年利益之争 仓促上线
  • 原文地址:https://www.cnblogs.com/andrew-chen/p/7527433.html
Copyright © 2011-2022 走看看