javascript实现一个方法,可以把字符串如"2[2[ab]3[c]]4[e]"变为’ababcccababccceeee’**
要求:实现一个方法,可以把字符串如"2[2[ab]3[c]]4[e]"变为’ababcccababccceeee’
解释:2[ab]为2个’ab’ 达到的效果为’abab’’
3[c]为3个’c’ 达到的效果为’ccc’’
4[e]为4个’e’ 达到的效果为’eeee’’
所以最终实现的效果为’ababcccababccceeee’
解题思路:使用正则找出匹配规则,再用递归进行深度遍历
var str='2[2[ab]3[c]]4[e]';
function decodeString(str){
if (!/\d+\[[a-zA-Z]+\]/g.test(str)) return str;
//如果不符合\d[a-zA-Z]的匹配格式,就直接跳出返回字符串
str=str.replace(/\d+\[[a-zA-Z]+\]/g,function(item,index){
//item指的是2[ab]3[c]4[e]
var arr=item.match(/(\d+)\[([a-zA-Z]+)\]/).slice(1);
//把数字和字母分为群组,不加g返回的是带有匹配元素和群组的数组,去掉匹配元素,获取只有数字和字母的数组
var s=arr[1].repeat(arr[0]);
//数组的第一项为字母,让数组的第一项重复
return s;
//把获取到的新的字符串(重复之后的字母)返回给str,str变为修改过后的字符串
});
str=decodeString(str)
//让str重新递归,查找符合条件的字符,进行替换,并且赋值给str,直至不符合条件直接返回str
return str;
}
console.log(decodeString(str));