function code(str, reverse){
var lang = [
'qwertyuiop[]asdfghjkl;\'zxcvbnm,.',
'йцукенгшщзхъфывапролджэячсмитьбю'
],
from = lang[+!reverse],
to = lang[+!!reverse],
out = '';
for(var i = 0, l = str.length; i < l; i++){
out += to[from.indexOf(str.charAt(i))] || str.charAt(i);
}
return out
}
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function arrayUniqueString(array){
var hash = {},
i = array.length;
while(i--){
if(array[i] in hash) array.splice(i,1);
else hash[array[i]] = true;
}
return array
}
var str = "Как хорошо vskf vfvf раму";
str = str.toLowerCase(); //в нижний регистр
str += ' ' + code(str) + ' ' + code(str, true); //добавляем к строке закодированный и декодированный варианты.
str = escapeRegExp(str); //экранируем спецсиволы
str = arrayUniqueString(str.split(/\s+/)).join('|'); //очищаем от дубликатов(в принципе можно обойтись без этого)
var reg = new RegExp( str, 'gi' ); //так найдёт куски слов(<b>Раму</b>нас Гядутис)
var strIn = ['Мама мыла раму', 'Vfvf мыла раму', 'Раму мыла мама', 'Hfve мыла мама', 'Hfve vskf vfvf', 'Мыла мама раму', 'Папа плевал на раму'],
i = strIn.length;
while(i--) strIn[i] = strIn[i].replace(reg, '<b>$&</b>');
alert(strIn.join('\n'))
Для запускания надо добавлять параметр run:
[JS/HTML run
].