Собрать из текста словарь
"длина": [слово,слово]
Выбирать слова нужной длины, а при отсутствии смотреть соседние по значению ключи.
words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);
// make dictionary
var db = [];
for( var i = 0; i < words.length; i++) {
word = words[i];
len = word.length;
if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
if(!~db[len].indexOf(word)) db[len].push(word);
}
function getWords(db, length, n) {
n = n || 3;
var result = [], offset = 0, m;
length = Math.max(0, Math.min(length, db.length));
while( result.length < n) {
m = n - result.length;
if( db[length + offset]) {
result = result.concat( getUpTo(m, db[length + offset]))
}
m = n - result.length;
if( offset && m && db[length - offset]) {
result = result.concat( getUpTo(m, db[length - offset]))
}
m = n - result.length;
if( m === 0) break;
offset++;
if( offset + length > db.length && offset > length) break;
}
return result;
}
function getUpTo(n, arr) {
return arr.slice(0, Math.min(n, arr.length));
}
Fiddle