Ответ к задаче
Ответ:
const reverse = (number) => {
const reg = /(?<minus>-?)(?<digits>\d+[^0])(?:0*$)/g;
return number.toString().replace(reg, (...args) => {
const { minus, digits } = args.pop();
const reversed = `${minus}${digits.split('').reverse().join('')}`;
return -2147483648 <= reversed && reversed <= 2147483648 - 1
? reversed
: '0';
});
};
Объяснение:
С помощью именных груп в регулярном выражении разбиваем число на две части: минус и цифровая часть без нулей в конце (с помощью (?:0*$) мы отрезаем нули).
Если число отрицательное, то значение minus === '-', если положительное - minus === ''.
На следующем шаге мы делаем реверс цифровой части числа, и создаём строку с перевернутым числом. Если полученное число выходит за рамки заданного интервала - возвращаем '0', в ином случае возвращаем полученное число.
Код для проверки:
const reverse = (number) => {
const reg = /(?<minus>-?)(?<digits>\d+[^0])(?:0*$)/g;
return number.toString().replace(reg, (...args) => {
const { minus, digits } = args.pop();
const reversed = `${minus}${digits.split('').reverse().join('')}`;
return -2147483648 <= reversed && reversed <= 2147483648 - 1
? reversed
: '0';
});
};
console.log(reverse(123)); // 321
console.log(reverse(120)); // 21
console.log(reverse(-321)); // -123
console.log(reverse(2990474529917009)); // 0