问题: 在我的数据库中,我以以下形式保存了一些帐号:
PL83102044760000870200961284
现在我必须将其格式化为这样:
PL 83 1020 4476 0000 8702 0096 1284
我编写了简单的 js 正则表达式来完成这项工作:
account.replace(/(\w{2})(\d{2})(\d{4})(\d{4})(\d{4})(\d{4})(\d{4})(\d{4})/g, '$1 $2 $3 $4 $5 $6 $7 $8');
但我认为这在某种程度上是幼稚的解决方案,并且可以重构此代码以避免重复。有人能把这个缩短吗?
最佳答案
类似的东西
"PL83102044760000870200961284".match(/.{4}/g).join(" ")
也许?
没有注意到“PL 83”的第一个要求
account.match(/.{4}/g).map(function(n){ return /([A-Z]{2})(\d{2})/.test(n) ? RegExp.$1 + " " + RegExp.$2 : n; }).join(" ");
说实话,我很想手动修复第一位而不是 map ,或者我确信有一种聪明的方法可以使用匹配来完成这两者......
这也有效
account.match(/[A-Z]{2}|(?:(?:\d{2}|\d{4})(?=(\d{4})*$))/g).join(" ")
关于javascript最短正则表达式格式化帐号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9821113/