Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помогите с регуляркой (https://javascript.ru/forum/misc/35082-pomogite-s-regulyarkojj.html)

ast_ross 30.01.2013 07:58

помогите с регуляркой
 
Здравствуйте уважаемые, подскажите как решить такую задачу.
Нужно подсветить результаты поиска. (например
<span class='highlight'>прив</span>ет мир
) Допустим есть строка:

"Короткометражки с ориентацией на классику немой комедии, первая из которых была номинирована на «Золотую пальмовую ветвь» в Каннах."

поисковые условия могут быть: содержит, начинается с, заканчивается на если с первым вариантом проблем нет (RegExp и ключи ig) то как подсветить к примеру поисковое условие начинается с "короткомет", при чем не должно ничего подсветится при условии начинается с "ориентац" так как на самом деле предложение не начинается с этого набора... Я имею ввиду поиск RegExp без ключа g здесь не подходит. То же самое с условием заканчивается на...

Ну и вторая проблема как при поиске тапа содержит "корот" или содержит "короткометр" подсветить последнее условие. Т.е. варианты типа
<span class='highlight'><span class='highlight'>Корот</span>кометр</span>ажки
или
<span class='highlight'>Корот</span>кометражки
не верны, правильно будет
<span class='highlight'>Короткометр</span>ажки


Дайте направление куда смотреть.

ksa 30.01.2013 08:56

Цитата:

Сообщение от ast_ross
как подсветить к примеру поисковое условие начинается с "короткомет"

Как вариант...

var s='Короткометражки с ориентацией на классику немой комедии, первая из которых была номинирована на «Золотую пальмовую ветвь» в Каннах.';
var val='Коротком';
alert(s.replace(new RegExp('(^'+val+')',''),'($1)'));

Цитата:

Сообщение от ast_ross
То же самое с условием заканчивается на...

Как вариант...

var s='Короткометражки с ориентацией на классику немой комедии, первая из которых была номинирована на «Золотую пальмовую ветвь» в Каннах.';
var val='ннах.';
alert(s.replace(new RegExp('('+val+')$',''),'($1)'));

ksa 30.01.2013 08:59

Цитата:

Сообщение от ast_ross
Ну и вторая проблема как при поиске тапа содержит "корот" или содержит "короткометр" подсветить последнее условие.

Убрать первое выделение, сделать новое выделение...

ast_ross 30.01.2013 12:27

Спасибо!

ast_ross 30.01.2013 12:46

может подскажите как удалить из массива "неугодные" данные.
т.е. к примеру:
var words = ['hel','hello','wor','world'];

как получить
var words = ['hello','world'];

многократно перебирать массив?

рони 30.01.2013 12:52

ast_ross,
Как бы вы определили неугодность данных? какой кретерий?

Deff 30.01.2013 13:08

Cобственно Вам нужно узнать : Если в массиве эти элементы ?
var words = ['hel','hello','wor','world'];
var str=(','+words+',').replace(/^.*?(,hello,|,world,).*?(,world,|,hello,).*$/gm,'$1$2');
var arr = str.replace(/^,(.*),$/,'$1').split(',,')
alert(arr);

ast_ross 30.01.2013 13:12

не угодность оценивается по принципу полного содержания одной последовательности в другой, к примеру при наличии world убираем wor, так как world содержит wor...

ast_ross 30.01.2013 13:14

и еще по первому вопросу забыл как быть если надо игнорировать html теги, т.е так уже не работает.

var s='<p>Короткометражки с ориентацией на классику немой комедии, первая из которых была номинирована на «Золотую пальмовую ветвь» в Каннах.</p>';
var val='Коротком';
alert(s.replace(new RegExp('(^'+val+')',''),'($1)'));


но html нужно сохранить, т.е. очистить изначально текст не вариант....

рони 30.01.2013 13:31

ast_ross,
при условии однократного вхождения одного слова в другое ... вариант
var words = ['world','hel','wor','hello'];
str = words.sort().join(' ').replace(/(\S+)(.*?)(\1\S+)/g,"$2$3").match(/\S+/g)
alert(str)


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