首页 > 解决方案 > 使用正则表达式对数字进行分组时考虑空格

问题描述

我有下面的函数,它在将每个数字除以 2 之后将每个数字解码为其对应的字母,然后返回一个解码的字符串我遇到的问题是在我的正则表达式中考虑空格,以便我可以使“十”一个包含一个数组空间作为字符串或沿着这些线的东西。

现在,如果您将 const tens 单独从函数中取出,它将为您提供一个按 2 分组的数字数组,但会省略空格,因此在函数内,我需要的是decodePS输出。我还需要返回两个号码,所以如果要通过,我应该得到我相信此时它确实可以的号码。'bookbook''book book'42i/j214222b(i/j)g

const alpha = [
  {letter: "a",number:"11"},
  {letter: "b",number:"21"},
  {letter: "c",number:"31"},
  {letter: "d",number:"41"},
  {letter: "e",number:"51"},
  {letter: "f",number:"12"},
  {letter: "g",number:"22"},
  {letter: "h",number:"32"},
  {letter: "(i/j)",number:"42"},
  {letter: "k",number:"52"},
  {letter: "l",number:"13"},
  {letter: "m",number:"23"},
  {letter: "n",number:"33"},
  {letter: "o",number:"43"},
  {letter: "p",number:"53"},
  {letter: "q",number:"14"},
  {letter: "r",number:"24"},
  {letter: "s",number:"34"},
  {letter: "t",number:"44"},
  {letter: "u",number:"54"},
  {letter: "v",number:"15"},
  {letter: "w",number:"25"},
  {letter: "x",number:"35"},
  {letter: "y",number:"45"},
  {letter: "z",number:"55"}
]; 

function search(arr, x) {

  let i = 0;
  let count = arr.length;
  while (i < count) {
    if (arr[i].number == x) {
      return arr[i].letter;
    }
    if (arr[i].letter == x) {
      return arr[i].number;
    }
    i++;
  }

  return x
}

function decodePS(input) {
  const tens = input.match(/\d{1,2}/g)
  console.log(tens)
  return tens.reduce((acc, num) => acc + search(alpha, num), "")
}

console.log(decodePS("21434352 21434352"))

标签: javascript

解决方案


使用匹配两位数字或空格的正则表达式:

/\d{1,2}| /

|分隔要匹配的替代模式。

您还可以search()使用内置.find()方法简化功能。

const alpha = [
  {letter: "a",number:"11"},
  {letter: "b",number:"21"},
  {letter: "c",number:"31"},
  {letter: "d",number:"41"},
  {letter: "e",number:"51"},
  {letter: "f",number:"12"},
  {letter: "g",number:"22"},
  {letter: "h",number:"32"},
  {letter: "(i/j)",number:"42"},
  {letter: "k",number:"52"},
  {letter: "l",number:"13"},
  {letter: "m",number:"23"},
  {letter: "n",number:"33"},
  {letter: "o",number:"43"},
  {letter: "p",number:"53"},
  {letter: "q",number:"14"},
  {letter: "r",number:"24"},
  {letter: "s",number:"34"},
  {letter: "t",number:"44"},
  {letter: "u",number:"54"},
  {letter: "v",number:"15"},
  {letter: "w",number:"25"},
  {letter: "x",number:"35"},
  {letter: "y",number:"45"},
  {letter: "z",number:"55"}
]; 

function search(arr, x) {
  let match = arr.find(el => el.number == x);
  if (match) {
    return match.letter;
  }
  match = arr.find(el => el.letter == x);
  if (match) {
    return match.number;
  }
  return x;
}

function decodePS(input) {
  const tens = input.match(/\d{1,2}| /g)
  console.log(tens)
  return tens.reduce((acc, num) => acc + search(alpha, num), "")
}

console.log(decodePS("21434352 21434352"))


推荐阅读