Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   регулярные выражения (https://javascript.ru/forum/events/23675-regulyarnye-vyrazheniya.html)

syegorius 01.12.2011 22:03

регулярные выражения
 
доброе время суток

подскажите пожалуйста как в регулярном выражении указать "не слово", т. е. вот это /[^a]*/ значит все символы кроме "а", а как указать все кроме слова "hello"?

заранее спасибо за ответы!

devote 01.12.2011 22:05

/[^(?:hello)]*/

trikadin 01.12.2011 22:21

devote, ну-ну...

alert("olleh".match(/[^(?:hello)]/));


Все специальные символы в квадратных скобках - просто символы. За исключением дефиса.

syegorius 01.12.2011 22:36

а если их закоментить, т. е. "\(", "\)" и "\?" это что то даст?

trikadin 01.12.2011 22:43

Цитата:

Сообщение от syegorius
а если их закоментить, т. е. "\(", "\)" и "\?" это что то даст?

Нет.

Опишите подробнее, что именно требуется? Может, можно решить и без такого...

devote 01.12.2011 22:51

ну значит никак это не сделать, обычно отрицаниями не пользуюсь.

trikadin 01.12.2011 22:59

Цитата:

Сообщение от devote
ну значит никак это не сделать, обычно отрицаниями не пользуюсь.

Просто можно попробовать вывернуться на чём-то вроде x(?!y).

А вообще да, отрицания в регах слабо сделаны.

Aetae 01.12.2011 23:03

Вообще условие бред, скорей всего вам нужно не то что вы просите.

trikadin 01.12.2011 23:18

Цитата:

Сообщение от Aetae
Вообще условие бред, скорей всего вам нужно не то что вы просите.

Потому и прошу уточнить...

syegorius 02.12.2011 00:15

))) вообще спасибо за такое внимание к посту. я решил задачу немного подругому, правда есть одна проблема, но о ней чуть по позже.

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

ну а теперь собственно о новой проблеме:

есть вот такой код:

var is=1
var string='Hello <span id="esui0" class="bold">a<span id="esui0" class="underline">mig</span>o</span>)<span class="inactive" id="anchor1"></span>some text<span class="some-class">and some text</span><span class="inactive" id="anchor0"></span>';
var enteredREN=new RegExp('(^.*anchor'+(is-1)+'[^>]*></span>)(.*)(<span.*anchor'+is+'.*$)','ig');
var enteredRENN=new RegExp('(^.*anchor'+is+'[^>]*></span>)(.*)(<span.*anchor'+(is-1)+'.*$)','ig');
var entered=string.replace(enteredREN,'$2');
if(entered!=='')entered=cHtml.replace(enteredRENN,'$2');


задача - нужно получить содержимое которое находится между span#anchor0 и span#anchor1, причем span#anchor1 может быть как после span#anchor0 так и перед, плюс между ними может быть не только текст но и теги.

как видите выше одно регулярное выражение написано для случая когда span#anchor1 после span#anchor0, а второе - когда перед.
но если последовательность span#anchor1 после span#anchor0, то когда происходит первая проверка, она возвращает всю строку, и вторая проверка не срабатывает.

скажите можно ли как-то это обойти, но без добавление в условие проверки if(entered!=='') entered==string, то есть что бы если не найдено то что я ищу возвращалась не проверяемая строка, а false или null


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