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

ksa 30.01.2013 14:54

Deff, да я сам рад, что и у меня хоть что-то стало получаться с этими регулярками... :D
Уш дюже прикольно они выглядят для неискушенного взгляда. Чистая галиматья! Но поражает их возможноть действия.

Deff 30.01.2013 14:55

ast_ross,
Проще(и удобнее, поскольку можно наращивать) создать массив проверочных слов

далее в цикле создавать из массива регеспы и тестить строку в цикле -

Типовая задача - проверка на цензуру сообщений и вывод слов замены

ksa 30.01.2013 14:56

Цитата:

Сообщение от ast_ross
как в одну ругулярку запихать условие начинается с Корот или начинается с кор или начинается с метражка в общем проверка не на одно а несколько возможных вариантов

А там есть "перечисляемый" символ |
Цитата:

x|y Находит x или y. Например,
/green|red/
найдет 'green' в "green apple" и 'red' в "red apple."
http://javascript.ru/RegExp

ast_ross 30.01.2013 15:45

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

ast_ross 30.01.2013 16:27

ну кто нибудь подкиньте регулярку удовлетворяющую условию <p> или <p><b> или сколь угодно html тегов пробовал <\/?\w[^>]*> не работает

ast_ross 30.01.2013 17:03

кто пояснит почему в $1 содержится только <i> а не <p><b></b><i>

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

Deff 30.01.2013 17:03

ast_ross,
Выразите точно условия

ast_ross 31.01.2013 07:02

Нужно заменить часть строки на такую же, только с оберткой типа
<span class='highlight'>mytext</span>
в случае если текст начинается с искомой строки.
При этом необходимо проигнорировать (если они имеются) теги html.
Т.е. к примеру искомое слово ко:

Вариант 1:
<!-- исходный текст: -->
Короткометражки с ориентацией на классику немой комедии.

<!-- после обработки: -->
<span class='highlight'>Ко</span>роткометражки с ориентацией на классику немой комедии.


Вариант 2:
<!-- исходный текст: -->
<p><b>Короткометражки</b> с ориентацией на классику немой комедии.</p>

<!-- после обработки: -->
<p><b><span class='highlight'>Ко</span>роткометражки</b> с ориентацией на классику немой комедии.</p>


Вариант 3: (ничего не изменится так не начинается на "ко")
<!-- исходный текст: -->
<p>Новые <b>короткометражки</b> с ориентацией на классику немой комедии.</p>

<!-- после обработки: -->
<p>Новые <b>короткометражки</b> с ориентацией на классику немой комедии.</p>


Вариант 4: (посложнее)
<!-- исходный текст: -->
<p><b>К</b>ороткометражки с ориентацией на классику немой комедии.</p>

<!-- после обработки: -->
<p><span class='highlight'><b>К</b>о</span>роткометражки с ориентацией на классику немой комедии.</p>

<!-- после обработки: (другой вариант) -->
<p><b><span class='highlight'>К</span></b><span class='highlight'>о</span>роткометражки с ориентацией на классику немой комедии.</p>



Все эти варианты должны быть описаны одной регуляркой.
Ну и то же самое только для условия "заканчивается на".

Deff 31.01.2013 09:35

function transF(str){
return str.replace(/^(<p>)?(<b>)(Ко(?!<))|(<b>К<\/b>о|Ко)/gm,'$1$2<span class="highlight">$3$4</span>');
}
alert(transF('<p><b>Короткометражки</b> с ориентацией на классику немой комедии.</p>'));
alert(transF('<p><b>К</b>ороткометражки с ориентацией на классику немой комедии.</p>'));
alert(transF('Короткометражки с ориентацией на классику немой комедии.'));
alert(transF('<p>Новые <b>короткометражки</b> с ориентацией на классику немой комедии.</p>'));

ast_ross 31.01.2013 11:01

я вижу что в регулярке жестко указанны варианты тегов и их вариации, а можно ли составить так что бы не имело значение ни то какие теги и какое их количество идет перед текстом?


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