Почему на последний палиндром выдает false

Подскажите пож. почему на последний палиндром выдает false, пробелы убрал.

function palindrom(str) {
   str = str.toLowerCase().replace(/\s/g,'');
   if (str === str.split('').reverse().join('')) {
      return true;
   } else {
      return false;
   }
}



console.log(palindrom('raCecar')); // === true;
console.log(palindrom('table')); // === false;
console.log(palindrom('А, роза упала на лапу Азора')); // === true;


Ответы (2 шт):

Автор решения: Алексей Шиманский

Попробуйте так:

str = str.toLowerCase().replace(/\W/g,'');

Потому что сейчас не учитывается то, что в строке могут быть и другие символы, помимо пробелов, а \W будет учитывать любой символ, кроме буквенного. (https://ru.wikipedia.org/wiki/Регулярные_выражения)

→ Ссылка
Автор решения: Grundy

Кроме пробелов нужно убрать и остальные не буквы.

В данном случае мешается запятая.

Для этого можно воспользоваться следующим регулярным выражением /[^a-zа-яё]/g

function palindrom(str) {
  str = str.toLowerCase().replace(/[^a-zа-яё]/g, '');
  if (str === str.split('').reverse().join('')) {
    return true;
  } else {
    return false;
  }
}



console.log(palindrom('raCecar')); // === true;
console.log(palindrom('table')); // === false;
console.log(palindrom('А, роза упала на лапу Азора')); // === true;

→ Ссылка