javascript - 使用正则表达式对数字进行分组时考虑空格
问题描述
我有下面的函数,它在将每个数字除以 2 之后将每个数字解码为其对应的字母,然后返回一个解码的字符串我遇到的问题是在我的正则表达式中考虑空格,以便我可以使“十”一个包含一个数组空间作为字符串或沿着这些线的东西。
现在,如果您将 const tens 单独从函数中取出,它将为您提供一个按 2 分组的数字数组,但会省略空格,因此在函数内,我需要的是decodePS
输出。我还需要返回两个号码,所以如果要通过,我应该得到我相信此时它确实可以的号码。'bookbook'
'book book'
42
i/j
214222
b(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"))
解决方案
使用匹配两位数字或空格的正则表达式:
/\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"))
推荐阅读
- c++ - C++ 函数指针
- android - 尝试在 Google Play 控制台中预览我的应用版本并不断出错
- sql - sql这个查询语句的作用是什么
- google-cloud-platform - Google Cloud 存储文件的基本身份验证
- css - 如何使用 React Native 在静态图像上实现网格覆盖
- appkit - 如何设置 NSSearchToolbarItem 的初始宽度
- javascript - 带有返回字符串的 Jss 函数
- c# - net5 自包含的 exe 缺少一些系统 DLL
- windows - Git、OpenSSH、windows 7“致命:远程端意外挂断”
- android - 地图不显示当前位置