2017-06-03 219 views
0

我剛開始使用正則表達式,我試圖解決這個問題,但它保持返回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);  
+2

沒有跳躍到正則表達式的一部分,你的變種'num'沒有按甚至沒有你想要的格式(xxx)xxx-xxxx,'.match()'不會給你的字符串格式。 – Lixus

+0

你的正則表達式中有括號和連字符。 – vabii

+0

是否有一種方法可以格式化該數字?新手在這裏! –

回答

2

試試這個:

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);

您需要首先捕獲三組數字,然後將它們格式化爲.replace()的第二個參數。 regex101 demo

+0

不客氣@LukasLukeStateczny如果我的答案幫助你,請你[接受它](https://stackoverflow.com/help/someone-answers)? –

+0

我深感困惑。爲什麼我要將數字粘貼在一起,然後使用正則表達式查找結果字符串的一部分,然後使用'replace'重新格式化,而不是直接格式化輸入? – 2017-06-03 16:41:58

+0

是的,你可以使用常規的JS連接格式化數字數組(例如''('+數字[0] +數字[1] +數字[2] +')''等)使用正則表達式問一個解決方案@torazaburo –

0

您正在加入[8, 3, 3, 7, 4, 1, 2, 0, 9, 3]"8337412093",然後在該字符串(其中#是數字)中搜索「(###)### - ####」。顯然,8337412093不包含(833)741-2093,因此無法匹配。

這可能是比較容易做的子串,但你可以在3組匹配的號碼,然後使用反向引用像大衛answer

0

正則表達式,用於解析和分析的字符串,而不是重新格式化格式化它們。在你的情況下,你試圖格式化一個數字列表。做一個小小的類似模板語言:

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]));

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);

相關問題