Answer
t.me/js_testОтвет:
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