【 Codewars刷題升級1】- 正則生成電話號 6sku

Codewars 刷題升級 1 - 【正則生成電話號】- 6sku - Creat Phone Number

問題描述

Write a function that accepts an array of 10 integers (between 0 and 9), that returns a string of those numbers in the form of a phone number.git

譯:編寫一個函數,該函數接受一個由 10 個整數組成的數組(在 0 到 9 之間),並以電話號碼的形式返回這些數字的字符串。github

例:正則表達式

createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]); // => returns "(123) 456-7890"
複製代碼

解題思路

  1. 將數組轉化爲字符串
  2. 正則替換(***) ***-****

解題

  1. String.prototype.replace()方法中的第二個參數可使用 $n 來插入匹配的第 n 個括號匹配的字符串。注意:數組

    • 須要第一個參數爲RegExp對象。
    • n 爲非負整數,取值範圍爲 [1, 100)
function createPhoneNumber(numbers) {
    return numbers.join('').replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}
複製代碼
  1. 測試
console.log(createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])); // "(123) 456-7890"
複製代碼

Codewars 精選解

成功提交本身的答案後,能夠瀏覽別人的解,有最佳實踐和最聰明解(clever)。ide

精選解一:

function createPhoneNumber(numbers) {
    numbers = numbers.join('');
    return `(${numbers.substring(0, 3)}) ${numbers.substring(3, 6)}-${numbers.substring(6)}`
}
複製代碼

精選解二:

function createPhoneNumber(numbers) {
    return numbers.join('').replace(/(...)(...)(.*)/, '($1) $2-$3');
}
複製代碼

個人解跟這個解相似,但此解兼容性更高一些。函數

精選解三:

function createPhoneNumber(numbers) {
    var n = numbers;
    return (
        '(' +
        n[0] +
        n[1] +
        n[2] +
        ') ' +
        n[3] +
        n[4] +
        n[5] +
        '-' +
        n[6] +
        n[7] +
        n[8] +
        n[9]
    );
}
複製代碼

雖然不夠優雅,但有網友評論說這是最快的解。[攤手]測試

本題相關知識

  1. String.prototype.replace()
  2. String.prototype.substring()
  3. 正則表達式

歡迎 starui

感謝開源,peace。spa

相關文章
相關標籤/搜索