Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

输入50a6we8y20x 输出50个a,6个we,8个y,20个x #122

Open
Sunny-117 opened this issue Nov 3, 2022 · 5 comments
Open

输入50a6we8y20x 输出50个a,6个we,8个y,20个x #122

Sunny-117 opened this issue Nov 3, 2022 · 5 comments

Comments

@Sunny-117
Copy link
Owner

No description provided.

@weirong111
Copy link

function extendsString(str: string): string {
  let num = 0;
  let cur = "";
  let res = "";
  for (let i = 0; i < str.length; i++) {
    if (!isNaN(Number(str[i]))) {
      if (cur) {
        res += cur.repeat(num);
        cur = "";
        num = 0;
      }
      num = num * 10 + Number(str[i]);
    } else {
      cur += str[i];
    }
  }
  res += cur.repeat(num);
  return res;
}

@elephantGQ
Copy link

var extendsString = (str) => str.replace(/(\d+)([a-z]+)/g, (_, $1, $2) => $2.repeat(parseInt($1)));

@bearki99
Copy link

function extandStr(str) {
  let num = "";
  let res = "";
  let curStr = "";
  for (let i = 0; i < str.length; i++) {
    if (str[i] >= "0" && str[i] <= "9") num += str[i];
    else if (i + 1 < str.length && str[i + 1] >= "0" && str[i + 1] <= "9") {
      curStr += str[i];
      num = parseInt(num);
      res += curStr.repeat(num);
      console.log(num, curStr);
      num = "";
      curStr = "";
    } else {
      curStr += str[i];
    }
  }
  if(curStr && num){
    res += curStr.repeat(parseInt(num));
  }
  return res;
}

@Tylermeek
Copy link

参照上面的回复
进行一定的参数解释,方便理解

// 主要难点在于如何巧用replace第二个参数newvalue
// 其中的特殊参数标识如下:
// $$  直接量符号(就是当做'$$'字符用)
// $&  与正则相匹配的字符串
// $`  匹配字符串左边的字符
// $’  匹配字符串右边的字符
// $1,$2,$,3,…,$n  匹配结果中对应的分组匹配结果

// 想要消除$的影响可以写成函数的返回值,函数具有一下几个参数:
// 第一个参数:匹配到的字符串
// 中间的参数:如果正则使用了分组匹配就为多个否则无此参数
// 倒数第二个参数:匹配字符串的对应索引位置
// 最后一个参数:原始字符串

let str = "20aB6we8y20x";
var extendsString = (str) => {
  let res = str.replace(/(\d+)([a-z][A-Z]+)/g, (_, $1, $2) =>
    // 此处参数分别为_(匹配到的字符串,没有实际用处,仅占位,为了确保后续参数能正确获取到值);
    // $1(分组匹配第一组,匹配到的是数字,至少一个);
    // $2(分组匹配第二组,匹配到的是大小写字母,至少一个)
    $2.repeat(parseInt($1))
  );
  return res;
};

console.log(extendsString(str));

@veneno-o
Copy link
Contributor

// 这道题最正确的解法应该是正则
function print(str){
    return String(str).replace(/(\d+)([a-zA-Z]+)/g,function(_, number, string){
        return string.repeat(number);
    })
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants