2016-11-27 113 views
0

例如:m1 = m,m2 = mm,m3i2 = mmmii如何將字符串中的數字替換/替換爲字符串內字母的乘數?

我試圖找到一個簡單的方法來做到這一點。任何有用的方法?

這不是一個家庭作業問題。我只是在練習我的Javascript技能。

+0

循環通過串並構造輸出。這並不複雜。請解釋你有什麼特別的問題。 –

+0

正則表達式不會幫助我理解基礎知識。我想通過迭代學會解決它。我可以分開數字和字母,然後修改字符串嗎? – 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'