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

2016-01-08 22:36:01 +08:00
 redtea

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

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

相关代码:

https://gist.github.com/sumhat/32e6afec88a6a9a8b575
hxsf
2016-01-09 02:01:17 +08:00
按照 @shinwood 所说从右边第五个开始枚举,是数字就替换成*,一次搞定,不用正则,自己写个函数就搞定了啊。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249406

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX