2017-02-03 12 views
0

Множество решений, которые я нашел здесь, дают true или false после проверки, является ли строка палиндром. У меня есть функция, которая проверяет, является ли строка палиндромом или нет:Определите палиндромы в предложении

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") 

Но это не совсем то, что я хочу. Это просто проверка, является ли строка палиндром или нет. Я хочу обновить функцию так, чтобы она идентифицировала все палиндромы в предложении вместо того, чтобы указывать его true или false. Так что, если есть такая фраза: «Мадам и Джон вышли в полдень». В этом предложении будут указаны палиндромы. «Мадам, полдень»

Любая помощь в этом будет оценена!

+0

Почему тройная цитата? 'палиндром (« О, кто это я видел, о кто? »)« –

+0

@SergioAlen, который должен был просто показать «» в моей работе. –

+0

Это кажется очень открытым. Каковы ограничения? Например, я могу видеть больше палиндромов в этом вопросе * «Госпожа и Джон ...», например «мадам», «я», «т в», «полдень» и «оо» – Phil

ответ

1

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));

+0

Большое спасибо за ответ! Мне было интересно, можете ли вы объяснить этот фрагмент «min = min || 3;» Проверяется ли минимальная длина? Я знаю || это оператор «ИЛИ» –

+1

|| является оператором OR, но в JS это также оператор нулевой коалесценции. Поэтому, если вы присвоите что-то вроде этого 'min = min || 3', тогда значение min будет установлено на его исходное значение, если это значение оценивает правдивость (например, если оно не является нулевым), и будет установлено значение 3, если оно ложно (например, ложные или нулевые значения). – Paul

-1
function findPalindromes(sentence) { 
    const words = sentence.replace(/[^\w\s]/gi, '').split(' '); 
    const palindromes = words.filter(isPalindrome); 
    return palindromes; 
} 

function isPalindrome(word) { 
    if (word.length <= 0) return false; 
    word = word.toLowerCase(); 
    for (let i = 0; i < word.length/2; i++) { 
    if (word[i] !== word[word.length - 1 - i]) return false; 
    } 
    return true; 
} 

https://jsfiddle.net/ewezbz22/1/

+0

Общая идея палиндромов состоит в том, чтобы игнорировать знаки препинания и пробега – Phil

+0

@Phil Благодарим вас за отзыв. Я обновил свой ответ, чтобы обрабатывать специальные символы. –