2016-11-27 4 views
0

例:m1 = m、m2 = mm、m3i2 = mmmii文字列の中の数字を、文字列の中の文字の乗数として置換/置換する方法はありますか?

これを行う簡単な方法を探しています。便利な方法は?

これは宿題の問題ではありません。私は自分のJavascriptスキルを練習しています。

+0

ループと出力を構成します。それほど複雑ではありません。具体的に何が問題になっているのかを説明してください。 –

+0

Regexは基本を理解するのに役立たないでしょう。私はiteratingを通して解決することを学びたい。数字と文字を区切って文字列を変更できますか? – Manny19

答えて

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が好きかもしれません。

0

あなたは、文字列を分割し、文字列ラムダスタイルで、ここ

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);

0

を返すために、結果を使用することができます

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

mmsss

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(''); 
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; 
} 
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' 
関連する問題