Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Поиск определённых слов в контенте (https://javascript.ru/forum/dom-window/9400-poisk-opredeljonnykh-slov-v-kontente.html)

Yellow79 14.05.2010 16:30

Поиск определённых слов в контенте
 
Имеется небольшой скрипт, функция, которая ищет в контенте определённые слова и выделяет их. При наведении на выделенные слова показывается баннер, по образу и подобию как тут. Функция написана и даже работает, но возникла одна неприятная неожиданность, поиск ведётся только по точному соответствию слов. Решил обратиться к тем у кого опыта работы с JS по больше чем мой, так как Я с JS занимаюсь буквально 2 месяца)))
Пытался разобраться с регулярными выражениями, но что то не получается, народ, подскажите, как переписать функцию, чтоб выделяла не по точному соответствию, тоесть, вводим слово для поиска "привет" и функция ищет в контенте не только "привет", но также "Привет", "ПРИВЕТ", "приВет"
Код прилагается:
function searchTextOnPage() {
	var toFind = document.getElementById("qwer").innerHTML;
	document.getElementById("qwe").innerHTML = document.getElementById("qwe").innerHTML.replace(eval("/"+toFind+"/g"), "<b>"+toFind+"</b>");
}

exec 14.05.2010 16:59

Используйте для регэкспа флаг i (игнорирование регистра).

/regexp/i

Yellow79 14.05.2010 17:02

exec,
а где именно его использовать? пробовал в строке ("/"+toFind+"/g") добавить, получилось это ("/"+toFind+"/gi") по сути работает, но только он мне заглавные меняет на строчные, а хотелось бы чтоб какой первоначально был регистр, тот и оставался

e1f 14.05.2010 17:04

function preg_quote( str ) {    // Quote regular expression characters
    // 
    // +   original by: booeyOH
    // +   improved by: Ates Goral ([url]http://magnetiq.com[/url])
 
    return str.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
}

function searchTextOnPage() {
    var toFind = document.getElementById('qwer').innerHTML,
        holder = document.getElementById('qwe');

    
    holder.innerHTML = holder.innerHTML.replace(new RegExp('('+preg_quote(toFind)+')', 'ig'), '<b>$1</b>');
}

Yellow79 14.05.2010 17:25

e1f,
ты действительно Профессор! Спасибо!!!

а можно ещё небольшое дополнение к коду?
чтоб допустим скрипт искал и выделял не только с разными регистрами, а допустим где встречаются слова в которых есть содержимое "привет", ну например чтоб ещё искал слова такие как "самПривет", "приветИк".

Gvozd 14.05.2010 20:37

вот так и помогай людям.сразу на шею сядут.
поэтому я мудак, зато не даю садится на шею себе


Часовой пояс GMT +3, время: 03:32.