Показать сообщение отдельно
  #4 (permalink)  
Старый 14.05.2009, 20:53
Аспирант
Отправить личное сообщение для Andrej_2 Посмотреть профиль Найти все сообщения от Andrej_2
 
Регистрация: 14.05.2009
Сообщений: 30

Ребята, спасибо большое! Очень выручили! И первый, и второй варианты работают. А я все ломал голову, что не так сделал. Выкинул последнюю проверку вообще нафиг, т.к. знак ";" в моем случае не кретичен., а в другом месте его вообще пустил "под нож". Я не совсем (вернее, "совсем не") разбираюсь в JS, дохожу до всего методом проб и ошибок. Вот например такую же регулярку пытаюсь использовать для обратной задачи: в заданном тексте найти нужный параметр и взять его значение, которое упоминается последним (если параметр по ошибке написан несколько раз). Перепробовал все что прочитал, все не получается. В результате тупо прошелся регулярками и получил код, от которого самому стало страшно. Код работает, но не совсем: берет не последнее упоминание, а первое. Пробовал использовать в reg_2 ?!, но не получается. Пока рабочий вариант такой: (Просьба ногами не пинать, я еще только изучаю JS):

<script>
var text_stilja = 'COLOR: #aaaaaa;color: #bbbbbb;background-color: #xxxxxx;color: #cccccc;color: #dddddd;';
var tshto_najti = 'color';

var rezultat_3= '';//--по умолчанию пустой

var reg = new RegExp('((^|;)\\s*)' + tshto_najti + '(\\s*:\\s*)([^;]*)','gi');

   if (reg.test(text_stilja))
   //--есть параметр, заменяю
   {
     var rezultat_1= text_stilja.replace(reg,'<<<<<$4>>>>>');
      var reg_2 = new RegExp('(([^<]*)(<<<<<([^>]*)>>>>>)(.*))','i');
      var rezultat_2= rezultat_1.replace(reg_2,'<<<<<$3>>>>>');
      var reg_3 = new RegExp('(<|>)','g');
      rezultat_3= rezultat_2.replace(reg_3,'');

   }
      window.alert('Что было: \n\n'+text_stilja+'\n\n\n\n После первой регулярки (экранирую значения нужного мне параметра): \n\n'+rezultat_1+'\n\n\n\n После второй регулярки (надо взять последнее упоминание, отсекая все лишнее; как и в браузере, последнее определение одного и того же самое важное): \n\n'+rezultat_2+'\n\n\n\n После третьей регулярки (убираю экранирование): \n\n'+rezultat_3);

</script>



Пробовал reg_2 сделать так:

var reg_2 = new RegExp('(([^<]*)(<<<<<([^>]*)>>>>>)(?!([^<]*)<<<<<)([^>]*))','gi');


но не вышло. Как можно такое сделать?

Последний раз редактировалось Andrej_2, 14.05.2009 в 21:08. Причина: Опечатка в коде
Ответить с цитированием