Ты мышкой наводил на подсвеченные синие области? там есть group 1, 2, 3 - это именно то что захватывается в переменные $1, $2, $3. а то что подсвечивает целиком строку - так это значит что она совпала(match) с правилом. В твоем первом примере у тебя наоборот 111 не попадало под правило, по-этому не подсвечивалось. Или тебе нужно НЕ захватывать (запоминать) значения (цифры), а захватывать все что не цифры? какой в этом смысл?)
мне нужно чтобы не подсвечивало синим ( не попадало под правило), смысл что скрипт так работает, извлекает из страницы размеры 111x222x333мм делает replace и оставляет только то что не подсвечено, заносит их в переменную и вставляет в другой странице вот кусок ( это imacros ) - SET !VAR1 EVAL("var x=\"{{!EXTRACT}}\"; x=x.replace(/(\s*(x|х)\s*\d+).*$/g,\"\");")
На сталкивался с imacros, но озвученная тобой логика это какая-то наркомания. Если там есть функции для работы с регулярными выражениями, значит должен быть способ получить захваченные значения (111, 222, 333) и вывести их как душе угодно. А ты пытаешься вывернуть все на изнанку - написать упоротое правило, запоминающее все что тебе не нужно, только для того чтобы это вырезать
во всех примерах что я находил он работает именно так --- Добавлено --- ура я сделал )) - ^\s*(\d+)\s*[xх]\s*|\s*[xх]\s*.*$
дичь) ну если тебе нужно чтобы в правило попадало все, кроме цифр, то попробуй это: Код: \D --- Добавлено --- не работает на примере "111 x222х333/444x555x666мм"
На скрине не подсвечено только 222, а ты говорил что тебе нужно 111, 222 и 333 неподсвечивать. В общем нихрена я не понял чего ты хотел) ну и да фиг с этим)
отдельно 111 потом отдельно 222 потом отдельно 333 , макрос обрезает все что подсвечено и оставляет только не подсвеченное. а вот и для третьего размера - ^\s*(\d+)\s*[xх]\s*(\d+)\s*[xх]\s*|\s*[\/]\s*.*$|\s*\D+$ --- Добавлено --- блин все эти \s*[xх]\s* можно заменить на \D , а я везде прописал возможные пробелы, и х в разной раскладке, ну для первого знакомства с регулярками сойдет
ох, это еще большая наркомания - обрабатывать регуляркой одно и то же три раза, чтобы вытащить значения методом исключения остального) и на производительность кода такое сильно влияет. посмотри в мануале функций этого 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
search скорее не подходит, у меня известно откуда конкретно значения брать, и на странице через search может подходить очень много значений а так он берет конкретно с нужного поля - TAG POS=1 TYPE=INPUT:TEXT FORM=ID:adminForm ATTR=NAME:extra_field_1 EXTRACT=TXT ну в любом случае мой вариант тоже работает, по крайней мере полюбому будет в 100500 раз быстрее заполнять характеристики у 600 товаров чем если бы я все это делал в ручную ))
смог сделать чтобы читало нормально регулярку в моем случае вышло так - 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\");")
Выгуглил что в 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) просто присваемаем нужный текст в комбинации с этими фрагментами.
выдало текст перед 111 111 текст перед 222 222 текст перед 333 333 текст после 333 , как бы это теперь разделить или мое разделить, чтобы не копировать 3 раза одно и тоже, чтобы было коротко типа SET !VAR2 $2 SET !VAR3 $3 или SET !VAR2 \" + xarray[2] + \" SET !VAR3 \" + xarray[3] + \"
я думал тебе нужно полученные фрагменты обвернуть в строго форматированную строку, но если те они нужны отдельно, то: Код: 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 экранирование двойных кавычек можно заменить на простые одинарные.
а что там извращаться, очень удобное расширение, 90% команд понятны и можно написать макрос автоматом, вот только команды с js и regex приходится простому пользователю долго ковырять методом тыка )), копировать - вставить в одно поле - разбить на 3 часть - вставить в 3 разных поля - повторить 600 раз - такой алгоритм сделал за 20 минут на replayspeed=medium, сколько бы я это вручную делал