我正在尝试替换下面的字符串如下:
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
yqyhoc1h1#
受@depperm给出的评论的启发,为什么不试试这个呢?我们从电话号码的末尾开始截取4位数字,然后将其附加到静态字符串中。
var phone = "9871234567"; var maskedPhone = "xxx-xxx-" + phone.slice(-4); console.log(maskedPhone)
这样,如果电话号码中的位数是可变的,您仍然会始终获得未屏蔽的最后4位数字。如果这是一个考虑因素,您还应该计算原始电话号码中的数字数量,并相应地添加x。
kr98yfug2#
正则表达式对于这个问题是不必要的。使用slice会简单得多,只需获取最后4位数字
slice
var phone = "9871234567" console.log(`xxx-xxx-${phone.slice(6)}`)
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})$
const phone = "9871234567" const result = phone.replace(/^\d{6}(\d{4})$/g, "xxx-xxx-$1"); console.log(result);
3条答案
按热度按时间yqyhoc1h1#
受@depperm给出的评论的启发,为什么不试试这个呢?我们从电话号码的末尾开始截取4位数字,然后将其附加到静态字符串中。
这样,如果电话号码中的位数是可变的,您仍然会始终获得未屏蔽的最后4位数字。如果这是一个考虑因素,您还应该计算原始电话号码中的数字数量,并相应地添加x。
kr98yfug2#
正则表达式对于这个问题是不必要的。使用
slice
会简单得多,只需获取最后4位数字lbsnaicq3#
如果字符串中应该只有数字,并且您的JavaScript环境接受lookbehindAssert,则可以在左侧Assert可选数字,匹配3位数字,同时在右侧Assert2位或更多数字:
Regex demo
如果总是有10个数字,则可以使用匹配,后跟捕获组,然后在替换中使用该捕获组。
Regex demo