输入: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