输入:2dff
输出 !error
两个d不需要压缩,故输入不合法
输入:4e@A
输出:!error
全部由小写英文字母组成,压缩后不会出现@,故输出不合法
function solution(str) {
const error = "!error";
// 只能包含小写字母和数字 [^a-z0-9]表示取反匹配,不是小写字母或者0-9数字的
const reg1 = /[^a-z0-9]/g;
if (reg1.test(str)) {
return error;
}
const reg2 = /(\d+)([a-z])+/g;
while (true) {
const matchStr = reg2.exec(str);
// 没有匹配到例如这11a这种的值
if (!matchStr) break;
const str1 = matchStr[0];
const numStr = matchStr[1];
const len = numStr.length;
const char = str1.substr(len, 1);
const nextChar = str1.substr(len + 1, 1);
// 排除 8aab这种
if (char === nextChar) return error;
// 排除 2a这种
if (numStr - 0 < 3) return error;
const newStr = char.repeat(numStr - 0);
str = str.replace(numStr + char, newStr);
}
return str;
}
console.log(solution("4aa"));
//4dff ddddff
//2dff !error
//4e@A !error
//4aa !error