例: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'
ループと出力を構成します。それほど複雑ではありません。具体的に何が問題になっているのかを説明してください。 –
Regexは基本を理解するのに役立たないでしょう。私はiteratingを通して解決することを学びたい。数字と文字を区切って文字列を変更できますか? – Manny19