регулярные выражения
доброе время суток
подскажите пожалуйста как в регулярном выражении указать "не слово", т. е. вот это /[^a]*/ значит все символы кроме "а", а как указать все кроме слова "hello"? заранее спасибо за ответы! |
/[^(?:hello)]*/
|
devote, ну-ну...
alert("olleh".match(/[^(?:hello)]/)); Все специальные символы в квадратных скобках - просто символы. За исключением дефиса. |
а если их закоментить, т. е. "\(", "\)" и "\?" это что то даст?
|
Цитата:
Опишите подробнее, что именно требуется? Может, можно решить и без такого... |
ну значит никак это не сделать, обычно отрицаниями не пользуюсь.
|
Цитата:
А вообще да, отрицания в регах слабо сделаны. |
Вообще условие бред, скорей всего вам нужно не то что вы просите.
|
Цитата:
|
))) вообще спасибо за такое внимание к посту. я решил задачу немного подругому, правда есть одна проблема, но о ней чуть по позже.
по поводу отрицания слова, то мне это нужно потому что я не раз уже сталкивался с этим, столкнулся сегодня и думаю, что еще не раз столкнусь и иногда просто не вижу другого способа создать регулярное выражение кроме как не отрицанием именно не символа, а целого слова! ну а теперь собственно о новой проблеме: есть вот такой код: 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 |
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'); if ( enteredREN.test( string ) ) { var entered= string.replace(enteredREN,'$2'); } else { var entered=string.replace(enteredRENN,'$2'); } alert( entered ); |
Цитата:
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 re = /<span[^>]+id="anchor(0|1)"><\/span>([\s\S]+)<span[^>]+id="anchor(0|1)"><\/span>/; var res = re.exec(string); if (res) { alert(res[2]); } |
Цитата:
спасибо! |
syegorius, вообще, если у вас эта строка изначально в dom-дереве находится, то погуглите в сторону range/textrange.
|
ну я вообще то этим и занимаюсь, пишу небольшой texteditor.
два спана про которые идет речь выше проверяют, что ввел пользователь, я пытаюсь сделать так что бы в случае копи/паста из других документов вставлялся только чистый текст еще что меня беспокоит - это будет ли успевать браузер обрабатывать столько операций за время между нажатием двух клавиш в случае если пользователь быстро печатает? |
Цитата:
|
Часовой пояс GMT +3, время: 16:30. |