V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
redtea
V2EX  ›  正则表达式

求一个正则表达式替换字符串里的数字为星号,只保留最后 4 个。

  •  
  •   redtea · 2016-01-08 22:36:01 +08:00 · 1814 次点击
    这是一个创建于 3028 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如 A1BC23D5678 ,替换后变成 A*BC**D5678 。有点麻烦的是数字的位置不是固定的。

    6 条回复    2016-01-09 02:01:17 +08:00
    shinwood
        1
    shinwood  
       2016-01-08 23:09:45 +08:00
    感觉不用正则还快一点,把字符串按字母拆开,从左到右枚举,遇到是数字的,变星号,直到累计变了 4 次后结束枚举。
    longaiwp
        2
    longaiwp  
       2016-01-08 23:10:33 +08:00
    直接写个方法处理字符串吧,这个你写正则反而没那么直接
    shinwood
        3
    shinwood  
       2016-01-08 23:11:41 +08:00   ❤️ 1
    再次审了一下题,不是变前四个,是保留最后四个,那就从右到左枚举,前四个数字跳过,然后断开这个字符串,后面的数字用正则全部换成星号,再把字符串拼回来。
    evilic
        4
    evilic  
       2016-01-09 00:30:37 +08:00
    截断后 4 个,前面的正则替换 d ,然后加回后 4 个。
    sumhat
        5
    sumhat  
       2016-01-09 01:09:16 +08:00   ❤️ 1
    大约是这个样子,需要根据语言的不同而做转义:/(?=\d.*\d.*\d.*\d.*\d)(\d)/gm

    相关代码:

    https://gist.github.com/sumhat/32e6afec88a6a9a8b575
    hxsf
        6
    hxsf  
       2016-01-09 02:01:17 +08:00
    按照 @shinwood 所说从右边第五个开始枚举,是数字就替换成*,一次搞定,不用正则,自己写个函数就搞定了啊。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1256 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.