Интересный вопрос - вот идея о том, как бы я это сделал, вероятно: http://jsfiddle.net/SaQAs/1/ - Не оптимизировано так или иначе!
var text = $('p').text(),
words = text.split(' '),
sortedWords = words.slice(0).sort(),
duplicateWords = [],
sentences = text.split('.'),
sortedSentences = sentences.slice(0).sort(),
duplicateSentences = [];
for (var i=0; i<sortedWords.length-1; i++) {
if (sortedWords[i+1] == sortedWords[i]) {
duplicateWords.push(sortedWords[i]);
}
}
duplicateWords = $.unique(duplicateWords);
for (var i=0; i<sortedSentences.length-1; i++) {
if (sortedSentences[i+1] == sortedSentences[i]) {
duplicateSentences.push(sortedSentences[i]);
}
}
duplicateSentences = $.unique(duplicateSentences);
$('a.words').click(function(){
var highlighted = $.map(words, function(word){
if ($.inArray(word, duplicateWords) > -1)
return '<span class="duplicate">' + word + '</span>';
else return word;
});
$('p').html(highlighted.join(' '));
return false;
});
$('a.sentences').click(function(){
var highlighted = $.map(sentences, function(sentence){
if ($.inArray(sentence, duplicateSentences) > -1)
return '<span class="duplicate">' + sentence + '</span>';
else return sentence;
});
$('p').html(highlighted.join('.'));
return false;
});
Обновление 1
Этот находит последовательности идентичных слов: http://jsfiddle.net/YQdk5/1/ Отсюда не должно быть трудно, например. игнорируйте любые знаки препинания в конце фрагментов при сравнении - вам просто нужно написать собственную версию inArray
метода.
var text = $('p').text(),
words = text.split(' '),
sortedWords = words.slice(0).sort(),
duplicateWords = []
highlighted = [];
for (var i=0; i<sortedWords.length-1; i++) {
if (sortedWords[i+1] == sortedWords[i]) {
duplicateWords.push(sortedWords[i]);
}
}
duplicateWords = $.unique(duplicateWords);
for (var j=0, m=[]; j<words.length; j++) {
m.push($.inArray(words[j], duplicateWords) > -1);
if (!m[j] && m[j-1])
highlighted.push('</span>');
else if (m[j] && !m[j-1])
highlighted.push('<span class="duplicate">');
highlighted.push(words[j]);
}
$('p').html(highlighted.join(' '));
Обновление 2
Мое регулярное выражение слабое, но эта (довольно грязная!) Версия, кажется, работает нормально: http://jsfiddle.net/YQdk5/2/ - Я почти уверен, что может быть лучший способ сделать это, но сейчас я Я должен оставить это в покое! : D - Удачи!
Обновление 3
Думая об этом, я не думаю, что код из предыдущего обновления будет хорошим. Вот почему я удалил это. Вы все еще можете найти его здесь: http://jsfiddle.net/YQdk5/2/
Суть в том, чтобы использовать регулярное выражение для сопоставления слов, что-то вроде:
/^word(\.?)$/