Search code examples
javascriptjqueryhtmlpalindrome

Identify palindromes in a sentence


A lot of solutions I found here are giving true or false after checking if a string is a palindrome. I have a function that checks if a string is a palindrome or not:

    function palindrome(myString){

    /* remove special characters, spaces and make lowercase*/
    var removeChar = myString.replace(/[^A-Z0-9]/ig, "").toLowerCase();

    /* reverse removeChar for comparison*/
    var checkPalindrome = removeChar.split('').reverse().join('');

    /* Check to see if myString is a Palindrome*/
    if(removeChar === checkPalindrome){

    document.write("<div>"+ myString + " is a Palindrome <div>");
    }else{

    document.write("<div>" + myString + " is not a Palindrome </div>");
    }
    }

    palindrome("Oh who was it I saw, oh who?")
    palindrome("Madam")
    palindrome("Star Wars")

But this is not quite what I want. It's just checking if the string is a palindrome or not. I want to update the function so that it identifies all of the palindromes in a sentence instead of giving it true or false. So if there's a sentence like this - "Madam and John went out at noon" It will list the palindromes in that sentence - "Madam, noon"

Any help in this would be appreciated!


Solution

  • function findPalindromes(str, min) {
      min = min || 3;
      var result = [];
      var reg = str.toLowerCase();
      var reg = reg.replace(/[^a-z]/g, ''); // remove if you want spaces
      var rev = reg.split("").reverse().join("");
      var l = reg.length;
      for (var i = 0; i < l; i++) {
        for (var j = i + min; j <= l; j++) {
          var regs = reg.substring(i, j);
          var revs = rev.substring(l - j, l - i);
          if (regs == revs) {
            result.push(regs);
          }
        }
      }
      return result;
    }
    
    var str1 = "Madam and John went out at noon";
    console.log(str1, findPalindromes(str1));
    var str2 = "\"Amore, Roma\" and \"There's no 'x' in Nixon\" are palindromes.";
    console.log(str2, findPalindromes(str2));