例如:m1 = m,m2 = mm,m3i2 = mmmii
我试图找到一种简单的方法来做到这一点。有用的方法吗?
这不是作业问题。我只是练习我的Javascript技能。
答案 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'