在JavaScript中格式化软件许可证密钥

问题

我们需要编写一个JavaScript函数,该函数将字符串str作为第一个参数,将Integer用作第二个参数。字符串str由字母数字字符和破折号组成。

破折号将字符串中的字母数字字符分成几组。(即,如果有n个破折号,则将字符串分成n + 1组)。给定字符串中的破折号可能放错了位置。

我们希望每组字符的长度为K(第一组可能会短一些,但可能更短,但仍必须包含至少一个字符)。

为了满足此要求,我们将重新插入破折号。此外,我们的函数需要将字符串中的所有小写字母都转换为大写字母。

例如,如果函数的输入为-

const str = '8-4B0t37-k';
const num = 4;

那么输出应该是-

const output = '84B0-T37K';

输出说明:

字符串str已分为两部分,每个部分有4个字符。

示例

为此的代码将是-

const str = '8-4B0t37-k';
const num = 4;
const formatKey = (str = '', num = 1) => {
   let acc = '';
   let flag = num;
   for(let i =str.length- 1; i >= 0; i--){
      const char = str.charAt(i);
      if(char !== '-') {
         if(flag === 0) {
            acc = `-${acc}`;
            flag = num;
         };
         acc = `${char.toUpperCase()}${acc}`;
         flag -= 1;
      };
   };
   return acc;
};
console.log(formatKey(str, num));

代码说明

我们执行功能的步骤formatKey()是-

  • 我们反向进行迭代,以便我们可以适应剩余字符<num的情况(因为第一部分没有完全具有num个字符的强制性)。

  • 我们保留了插入字符的数量。并且当它为0时,我们插入破折号并重置为num。

输出结果

控制台中的输出将是-

84B0-T37K