regex 屏蔽并在每3位数字后插入连字符

x6492ojm  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(81)

我正在尝试替换下面的字符串如下:

var phone = "9871234567"
result = xxx-xxx-4567

下面是我使用过的js代码,但这并没有给我正确的结果。

var lastphdigit = phone.replace(/\d(?=(?:\D*\d){4})/g, "x");
var lastphdighyp = lastphdigit.replace(/.{3}(?!$)/g, '$&-'); //xxx-xxx-456-7
yqyhoc1h

yqyhoc1h1#

受@depperm给出的评论的启发,为什么不试试这个呢?我们从电话号码的末尾开始截取4位数字,然后将其附加到静态字符串中。

var phone = "9871234567";
var maskedPhone = "xxx-xxx-" + phone.slice(-4);
console.log(maskedPhone)

这样,如果电话号码中的位数是可变的,您仍然会始终获得未屏蔽的最后4位数字。如果这是一个考虑因素,您还应该计算原始电话号码中的数字数量,并相应地添加x。

kr98yfug

kr98yfug2#

正则表达式对于这个问题是不必要的。使用slice会简单得多,只需获取最后4位数字

var phone = "9871234567"
console.log(`xxx-xxx-${phone.slice(6)}`)
lbsnaicq

lbsnaicq3#

如果字符串中应该只有数字,并且您的JavaScript环境接受lookbehindAssert,则可以在左侧Assert可选数字,匹配3位数字,同时在右侧Assert2位或更多数字:

(?<=^\d*)\d{3}(?=\d{2,}$)

Regex demo

const phone = "9871234567"
const result = phone.replace(/(?<=^\d*)\d{3}(?=\d{2,}$)/g, "xxx-");
console.log(result);

如果总是有10个数字,则可以使用匹配,后跟捕获组,然后在替换中使用该捕获组。

^\d{6}(\d{4})$

Regex demo

const phone = "9871234567"
const result = phone.replace(/^\d{6}(\d{4})$/g, "xxx-xxx-$1");
console.log(result);

相关问题