例如:m1 = m,m2 = mm,m3i2 = mmmii如何將字符串中的數字替換/替換爲字符串內字母的乘數?
我試圖找到一個簡單的方法來做到這一點。任何有用的方法?
這不是一個家庭作業問題。我只是在練習我的Javascript技能。
例如:m1 = m,m2 = mm,m3i2 = mmmii如何將字符串中的數字替換/替換爲字符串內字母的乘數?
我試圖找到一個簡單的方法來做到這一點。任何有用的方法?
這不是一個家庭作業問題。我只是在練習我的Javascript技能。
所以容易與正則表達式和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
。
你可以分割字符串並將結果返回字符串
var s = 'm3i2'.split(/(?=[a-z])/),
result = s.reduce(function (r, a) {
var i = +a.slice(1);
while (i--) {
r += a[0];
}
return r;
}, '');
console.log(result);
在這裏拉姆達風格
"m2s3".split("").reduce((s,c) => isNaN(c) ? s + c : s + s[s.length-1].repeat(c-1));
mmsss
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('');
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;
}
// 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'
循環通過串並構造輸出。這並不複雜。請解釋你有什麼特別的問題。 –
正則表達式不會幫助我理解基礎知識。我想通過迭代學會解決它。我可以分開數字和字母,然後修改字符串嗎? – Manny19