如何替换/替换字符串中的数字作为字符串中字母的乘数?

时间:2016-11-27 22:10:36

标签: javascript

例如:m1 = m,m2 = mm,m3i2 = mmmii

我试图找到一种简单的方法来做到这一点。有用的方法吗?

这不是作业问题。我只是练习我的Javascript技能。

6 个答案:

答案 0 :(得分:1)

使用正则表达式和repeat非常简单:

function f(str) {
  return str.replace(/(.)(\d+)/g, (_, s, n) => s.repeat(n));
}
console.log(f('m1'));   // 'm'
console.log(f('m2'));   // 'mm'
console.log(f('m3i2')); // 'mmmii'

如果字符串以数字开头,则表现有点不一致。您可能更喜欢/(\D?)(\d+)/g

答案 1 :(得分:0)

您可以拆分字符串并使用结果返回字符串



"m2s3".split("").reduce((s,c) => isNaN(c) ? s + c : s + s[s.length-1].repeat(c-1));




答案 2 :(得分:0)

这里是lambda风格

0xc2 0xa0
  

mmsss

答案 3 :(得分:0)

ES5示例:

var s = 'm3i2j1';
var re = /([a-z])(\d+)/g;
var matches;
var buffer = [];
while (matches = re.exec(s)) {
  buffer.push(Array(+matches[2] + 1).join(matches[1]));
}
var output = buffer.join('');

答案 4 :(得分:0)

function replaceNumbers(text) {
     var match = text.match(/\D\d*/g), ans = '', i, n;

     for (i = 0; i < match.length; ++i) {
          n = Number(match[i].substr(1));
          ans += match[i].substr(0, 1).repeat(n > 0 ? n : 1);
     }

     return ans;
}

答案 5 :(得分:0)

// Here is the solution I came up with.

function letTheNumberDoTheTalking(str) {
  var word = '';
  var start = 0;

  for (var next = 1; next < str.length; next += 2) {
    var letter = str[start];
    var multipliedLetter = str[start].repeat(str[next]);
    word += multipliedLetter;
    start = next + 1;
  }
  return word;
}

letTheNumberDoTheTalking('m1i1s2i1s2i1p2i1')); //==> 'mississippi'