第一次使用正则表达式

时间:2017-06-03 15:50:39

标签: javascript regex

我刚开始使用正则表达式,我试图解决这个问题,但它保持返回null。我的代码出了什么问题? 我希望它返回=(833)741-2093

function phoneNumber(numbers){
  var num = numbers.join('');
  var r = /\(\d{3}\)\s\d{3}\-\d{4}/;
  var match = num.match(r);
  return match;
}

var output = phoneNumber([8, 3, 3, 7, 4, 1, 2, 0, 9, 3]);

console.log(output);    

4 个答案:

答案 0 :(得分:2)

试试这个:



id:jSheWaU4yeYAAAAAAAADHw




您需要先捕获三组数字,然后在function phoneNumber (numbers) { var numberStr = numbers.join(''); return numberStr.replace(/(\d{3})(\d{3})(\d{4})/, "\($1\) $2\-$3"); } var output = phoneNumber([8, 3, 3, 7, 4, 1, 2, 0, 9, 3]); console.log(output);的第二个参数中格式化它们。 {{3}}

答案 1 :(得分:0)

您正在加入[8, 3, 3, 7, 4, 1, 2, 0, 9, 3]"8337412093",然后在该字符串中搜索“(###)### - ####”(其中#是数字)。显然,8337412093不包含(833)741-2093所以它无法匹配。

这对子字符串来说可能更容易,但你可以匹配3组中的数字,然后使用像大卫的answer

中的后引用重新格式化它

答案 2 :(得分:0)

Regexp用于解析和分析字符串,而不是用于格式化字符串。在您的情况下,您正在尝试格式化数字列表。制作一个类似模板的小语言:

function format(template, digits) {
  let n = 0;
  return template.replace(/#/g, _ => digits[n++]);
}

console.log(format("(###) ###-####", [8, 3, 3, 7, 4, 1, 2, 0, 9, 3]));

答案 3 :(得分:0)

你去......

function phoneNumber(numbers){
  var num = numbers.join('');
  var r = /^(\d{3})(\d{3})(\d{4})$/;
  return num.replace(r,'($1) $2-$3');
}

var output = phoneNumber([8, 3, 3, 7, 4, 1, 2, 0, 9, 3]);

console.log(output);