正则表达式与明星的电话号码

时间:2016-07-21 09:14:46

标签: javascript regex node.js string function

以下功能可将电话号码(例如+33286487648)转换为+332 ****** 48。

formatPhoneWithStar = function(phone) {

    const prefixLength = 4;
    const suffixLength = 3;

    const prefix  = phone.substring(0, prefixLength);
    const suffix  = phone.slice(-suffixLength);
    const nbStars = phone.length - (prefixLength + suffixLength);

    let formattedPhone = prefix;
    for (let i = 0; i < nbStars; i++) {
       formattedPhone += '*';
    }
    formattedPhone += suffix;

    return formattedPhone;
}

但是,我想避免使用forloop(nodeJS目的)。我想知道是否可以使用正则表达式完成相同的功能?

我已经尝试了一些像

这样的人
([0-9]{3})([0-9]{4})([0-9]{3})\w+

然后我想使用$ 1和$ 3,例如$ 1 + [如何生成明星] + $ 3。有没有人知道如果不使用for循环和使用正则表达式这是否可行?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

此处无需使用正则表达式,只需使用"*".repeat(nbStars)

&#13;
&#13;
phone ="+33286487648";
prefixLength = 4;
suffixLength = 3;

prefix  = phone.substring(0, prefixLength);
suffix  = phone.slice(-suffixLength);
nbStars = phone.length - (prefixLength + suffixLength);

formattedPhone = prefix + "*".repeat(nbStars) + suffix;

console.log(formattedPhone);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以传递replacement function

'+33286487648'.replace(/^(\+?\d{3})(\d+)(\d{2})$/, function() {
  return arguments[1] + arguments[2].replace(/./g, '*') + arguments[3];
}); // Produces '+332******48'

或许眼睛看起来更容易一点(灵感来自其他答案的.repeat):

&#13;
&#13;
function hideMiddle(string, prefixLength, suffixLength) {
  var re = new RegExp('^(\\+?\\d{' + prefixLength + '})(\\d+)(\\d{' + suffixLength + '})$');

  return string.replace(re, function(match, prefix, middle, suffix) {
    return prefix + '*'.repeat(middle.length) + suffix;
  });
}
console.log(hideMiddle('+33286487648', 3, 2));
console.log(hideMiddle('+33286487648', 1, 1));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

使用正则表达式+替换:

&#13;
&#13;
    var phone = "+33286487648";
    var m = phone.match(/(\+\d{3})(\d+)(\d{3})/);
    var res = m[1] + '*'.repeat(m[2].length) + m[3];
    console.log(res);
&#13;
&#13;
&#13;