我刚开始使用正则表达式,我试图解决这个问题,但它保持返回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);
答案 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);