weixiangzhe

关于正则数字添加千分号 /\B((?=(?:\d{3}))+$)/g 不太理解

  •  
  •   weixiangzhe · Jan 29, 2022 · 2340 views
    This topic created in 1565 days ago, the information mentioned may be changed or developed.

    img

    (?=(?:\d{3}) 可以匹配到 "333" 前面的空字串 ""

    (?=(?:\d{3})+ 一到多个 但匹配里的 $ 号,或者有些人写的 (?!\b) 是啥意思呢

    '8123456789'.replace(/\B(?=(?:\d{3})+$)/g,',') // 8,123,456,789
    
    "8123456789".replace(/\B(?=(?:\d{3})+(?!\d))/g,",") // 8,123,456,789
    

    为什么不能写成

    '8123456789'.replace(/\B(?=(?:\d{3}))+$/g,',') // '8123456789'
    
    5 replies    2022-01-29 12:58:14 +08:00
    weixiangzhe
        1
    weixiangzhe  
    OP
       Jan 29, 2022
    [img][/img]
    weixiangzhe
        2
    weixiangzhe  
    OP
       Jan 29, 2022
    [img][/img]
    freedomSky
        3
    freedomSky  
       Jan 29, 2022
    '8123456789'.replace(/\B(?=(?:\d{3})+$)/g,',') // 8,123,456,789 #当前位置(非边界)后到结尾有 3N 个字母,则插入分隔符

    "8123456789".replace(/\B(?=(?:\d{3})+(?!\d))/g,",") // 8,123,456,789 #当前位置(非边界)后面有 3N 个数字+非数字,则插入分隔符,比如 8123456789x

    '8123456789'.replace(/\B(?=(?:\d{3}))+$/g,',') # 这里+施加在 look ahead 上是无效的,必须在 look ahead 的内部,这里相当于没有加,$也放在 look ahead 外,我理解相当于被替换的东西不连续了(中间是 look ahead ),应该是不允许的
    freedomSky
        4
    freedomSky  
       Jan 29, 2022
    @freedomSky 第一行打错了,3N 个字母-》 3N 个数字
    imn1
        5
    imn1  
       Jan 29, 2022
    题外,这个只能用在整数,还不够通用,$改成(\.|$)能用在浮点数

    (?!\d)估计目的也是用在兼容浮点数,只是不够明确,当然如果输入无误(排除字母乱入的情况),也是足够的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2763 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:02 · PVG 08:02 · LAX 17:02 · JFK 20:02
    ♥ Do have faith in what you're doing.