【 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