Уголок ТыжПроГрамиста

Тема в разделе "Флудилка", создана пользователем receptor, 30 июл 2016.

  1. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    Ты мышкой наводил на подсвеченные синие области? там есть group 1, 2, 3 - это именно то что захватывается в переменные $1, $2, $3. а то что подсвечивает целиком строку - так это значит что она совпала(match) с правилом. В твоем первом примере у тебя наоборот 111 не попадало под правило, по-этому не подсвечивалось.

    Или тебе нужно НЕ захватывать (запоминать) значения (цифры), а захватывать все что не цифры? какой в этом смысл?)
     
  2. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    мне нужно чтобы не подсвечивало синим ( не попадало под правило), смысл что скрипт так работает, извлекает из страницы размеры 111x222x333мм делает replace и оставляет только то что не подсвечено, заносит их в переменную и вставляет в другой странице

    вот кусок ( это imacros ) -
    SET !VAR1 EVAL("var x=\"{{!EXTRACT}}\"; x=x.replace(/(\s*(x|х)\s*\d+).*$/g,\"\");")
     
  3. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    На сталкивался с imacros, но озвученная тобой логика это какая-то наркомания. Если там есть функции для работы с регулярными выражениями, значит должен быть способ получить захваченные значения (111, 222, 333) и вывести их как душе угодно. А ты пытаешься вывернуть все на изнанку - написать упоротое правило, запоминающее все что тебе не нужно, только для того чтобы это вырезать :headbang:
     
  4. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    во всех примерах что я находил он работает именно так
    --- Добавлено ---
    ура я сделал )) - ^\s*(\d+)\s*[xх]\s*|\s*[xх]\s*.*$ :)
     
  5. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    дичь) ну если тебе нужно чтобы в правило попадало все, кроме цифр, то попробуй это:
    Код:
    \D
    :pray:
    --- Добавлено ---
    не работает на примере "111 x222х333/444x555x666мм"
     
  6. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    у меня работает :lolsign:
    [​IMG]
     
  7. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    На скрине не подсвечено только 222, а ты говорил что тебе нужно 111, 222 и 333 неподсвечивать. В общем нихрена я не понял чего ты хотел) ну и да фиг с этим)
     
  8. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    отдельно 111 потом отдельно 222 потом отдельно 333 :crazy:, макрос обрезает все что подсвечено и оставляет только не подсвеченное.
    а вот и для третьего размера - ^\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*|\s*[\/]\s*.*$|\s*\D+$ :smoke:
    --- Добавлено ---
    блин все эти \s*[xх]\s* можно заменить на \D :headbang:, а я везде прописал возможные пробелы, и х в разной раскладке, ну для первого знакомства с регулярками сойдет :D
     
  9. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    ох, это еще большая наркомания - обрабатывать регуляркой одно и то же три раза, чтобы вытащить значения методом исключения остального) и на производительность кода такое сильно влияет. посмотри в мануале функций этого imacros получение значений из (скобок) в переменные, если такое есть - тогда мой самый первый пример позволит тебе одной регуляркой получить сразу все три числа в переменные.
    --- Добавлено ---

    Это оно http://wiki.imacros.net/SEARCH ? если да, то:
    Код:
    SEARCH SOURCE=REGEXP:"ga\\('create', '([^']+)', 'imacros.net'\\)" EXTRACT="Tracker is $1"
    PROMPT {{!EXTRACT}}
    
    в твоем случае
    Код:
    SEARCH SOURCE=REGEXP:"\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*(\d+).*" EXTRACT="оформляем в строку как хотим $1 разделяем $2 разделяем $3 тыц тыц"
    PROMPT {{!EXTRACT}}
    
    вместо $1 $2 $3 будут подставляться 111 222 и 333
     
    stan88 нравится это.
  10. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    search скорее не подходит, у меня известно откуда конкретно значения брать, и на странице через search может подходить очень много значений

    а так он берет конкретно с нужного поля -
    TAG POS=1 TYPE=INPUT:TEXT FORM=ID:adminForm ATTR=NAME:extra_field_1 EXTRACT=TXT

    ну в любом случае мой вариант тоже работает, по крайней мере полюбому будет в 100500 раз быстрее заполнять характеристики у 600 товаров чем если бы я все это делал в ручную ))
     
  11. 6demons

    6demons Navalny's wing of Poezone

    Сообщения:
    7.236
    Симпатии:
    7.268


    птица-живность-гнездо-машина-1572445.gif
     
    ad1ce, Aspelound, narical и 4 другим нравится это.
  12. yatut

    yatut хп много небывает

    Сообщения:
    2.056
    Симпатии:
    914
    (\(\
    (=':')
    (,('')('')
     
    NightFw и Unre@l нравится это.
  13. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    смог сделать чтобы читало нормально регулярку в моем случае вышло так -
    SET !VAR1 EVAL("var x=\"{{!EXTRACT}}\"; x=x.replace(/\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*(\d+).*/g,\"$1\");")
    SET !VAR2 EVAL("var x=\"{{!EXTRACT}}\"; x=x.replace(/\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*(\d+).*/g,\"$2\");")
    SET !VAR3 EVAL("var x=\"{{!EXTRACT}}\"; x=x.replace(/\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*(\d+).*/g,\"$3\");")
     
  14. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    Выгуглил что в eval там чистый JS, так что попробуй заменить на это это:

    Код:
    SET !VAR EVAL("var x=\"{{!EXTRACT}}\"; var xarray=x.match(/\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*(\d+).*/i); x = \"текст перед 111 \" + xarray[1] + \" текст перед 222 \" + xarray[2] + \" текст перед 333 \" + xarray[3] + \" текст после 333 \"; ")
    Т.е. делается всего одна регулярка функцией match, за счет чего в переменную xarray получаем массив всех нужных фрагментов, далее в возвращаемую переменную x (которая попадет в VAR) просто присваемаем нужный текст в комбинации с этими фрагментами.
     
  15. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    выдало текст перед 111 111 текст перед 222 222 текст перед 333 333 текст после 333 , как бы это теперь разделить или мое разделить, чтобы не копировать 3 раза одно и тоже, чтобы было коротко типа
    SET !VAR2 $2
    SET !VAR3 $3
    или

    SET !VAR2 \" + xarray[2] + \"
    SET !VAR3 \" + xarray[3] + \"
     
  16. Dissolator

    Dissolator Мародератор Команда форума Переводчик

    Сообщения:
    1.055
    Симпатии:
    1.259
    я думал тебе нужно полученные фрагменты обвернуть в строго форматированную строку, но если те они нужны отдельно, то:
    Код:
    SET !VARARRAY EVAL("var x='{{!EXTRACT}}'; var xarray=x.match(/\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*(\d+).*/i); x = xarray[1] + '|' + xarray[2] + '|' + xarray[3]; ")
    SET !VAR1 EVAL("var xx = '{{!VARARRAY}}'.split('|'); xx[0];")
    SET !VAR2 EVAL("var xx = '{{!VARARRAY}}'.split('|'); xx[1];")
    SET !VAR3 EVAL("var xx = '{{!VARARRAY}}'.split('|'); xx[2];")
    
    склееваем в строку фрагменты с разделителем | и потом из строки в каждую переменную вынимаем нужный фрагмент
    з.ы. как ты уже заметил - внутри EVAL экранирование двойных кавычек можно заменить на простые одинарные.
     
    stan88 нравится это.
  17. 6demons

    6demons Navalny's wing of Poezone

    Сообщения:
    7.236
    Симпатии:
    7.268
    [​IMG]
     
    ad1ce, stan88, nikmaos и 3 другим нравится это.
  18. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    работает если заменить !VARARRAY на !VAR0 :), а в случае с $1, $2, $3 как это будет выглядеть ?
     
  19. Mi7teR

    Mi7teR Диванный эксперт

    Сообщения:
    634
    Симпатии:
    783
    как люди только не извращаются.
    ЗЫ по теме - imacros only reqiured?
     
  20. stan88

    stan88 Exile

    Сообщения:
    2.056
    Симпатии:
    1.605
    а что там извращаться, очень удобное расширение, 90% команд понятны и можно написать макрос автоматом, вот только команды с js и regex приходится простому пользователю долго ковырять методом тыка )), копировать - вставить в одно поле - разбить на 3 часть - вставить в 3 разных поля - повторить 600 раз - такой алгоритм сделал за 20 минут на replayspeed=medium, сколько бы я это вручную делал :)
     
    receptor нравится это.