[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Andrey_A, simup, ХарВик, chip642  
Multi_SR.js - Поиск и замена с регулярными выражениями
Andrey_AДата: Понедельник, 02.04.2012, 22:25 | Сообщение № 1
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Поиск и замена с регулярными выражениями
Используется скрипт FunctionsSave.js - Настраиваемая функция сохранения файла

// © cnnnc
// version: 1.0 (04.08.2010) +10mod 27.11.2016 Аверин Андрей

Multi_SR


 
Andrey_AДата: Суббота, 08.09.2012, 15:27 | Сообщение № 2
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
         Письмо с E-mail

Сдается мне, что это не так, то есть с регулярными-то выражениями он как раз и не работает. Пример:
"Удалить Tab-ы и пробелы в начале строки" Call("Scripts::Main", 1, "multi_sr.js", `"(^[ \t]+)" ""`) Icon("%a\AkelPadImage.dll",150)
не подает никаких признаков жизни, хотя данное выражение
(^[ \t]+)
прекрасно работает в скрипте «SearchReplace.js» по вышеприведённой ссылке.
...
Что-то я не вижу тут упоминания о регулярных выражениях... Был бы весьма признателен, если бы Вы мне «разжевали» мою ошибку. Ежели я прав — огромная просьба — довести сей скрипт до ума. Потенциал у него — колоссальный!!!
Не совсем для меня ясен 6-ой пункт «bReplaceFunction - заменять на функцию» — по подробней, пожалуйста.



Скрипт отличный, единственное, как и у многих js скриптов, мало примеров...
Вот примеры с которыми я уже давно работаю:

Code

         -"Вставка пустых строк между строками" Call("Scripts::Main", 1, "Multi_SR.js", `"\n" "\n\n" "" "" "1"`) Icon("%a\AkelPadImage.dll",600)
         -"Замена пробела на _ в выделенном" Call("Scripts::Main", 1, "Multi_SR.js", `" " "_" 0 1 1 0 8 3`) Icon("%a\AkelPadImage.dll",527)
         -"Замена  _ на  пробел в выделенном" Call("Scripts::Main", 1, "Multi_SR.js",`"_" " "  0 1 1 0 8 3`) Icon("%a\AkelPadImage.dll",527)
         -"Замена ftp: на http:" Call("Scripts::Main", 1, "Multi_SR.js", `"ftp://" "http://"`) Icon("%a\AkelPadImage.dll",527)
           SEPARATOR
         -"Замена ; на \n" Call("Scripts::Main", 1, "Multi_SR.js", `";" "\n" 0 1 1 0 4 3`) Icon("%a\AkelPadImage.dll",527)
         -"Замена \n на ;" Call("Scripts::Main", 1, "Multi_SR.js", `"\n" ";" 0 1 1 0 4 3`) Icon("%a\AkelPadImage.dll",527)

         -"Замена табуляции на пробел" Call("Scripts::Main", 1, "Multi_SR.js", `"\t" " "`) Icon("%a\AkelPadImage.dll",634)
         -"Замена пробела на табуляцию" Call("Scripts::Main", 1, "Multi_SR.js", `" " "\t"`) Icon("%a\AkelPadImage.dll",634)

         -"Удаление пустых строк" Call("Scripts::Main", 1, "Multi_SR.js", `"(\n)+" "$1"`) Icon("%a\AkelPadImage.dll",323)
         -"Удаление более одной пустой строки" Call("Scripts::Main", 1, "Multi_SR.js", `"(\n\n)\n+" "$1" 0 1 1 0 4 3`) Icon("%a\AkelPadImage.dll",669)
            SEPARATOR
         -"Удалить переводы строк" Call("Scripts::Main", 1, "Multi_SR.js", `"\n" "" 0 1 1 0 4 3`) Icon("%a\AkelPadImage.dll",1051)

         -"Удаление табов" Call("Scripts::Main", 1, "Multi_SR.js", `"(\t)+" ""`) Icon("%a\AkelPadImage.dll",671)
         -"Удаление пробелов в выделенном" Call("Scripts::Main", 1, "Multi_SR.js", `" " "" 0 1 1 0 8 3`)


Регулярные выражения работают нормально, в вашем случае для ^ необходимо подключить Esc-последовательности и Мультистрочность, без них и не работает

вот такой вариант срабатывает:
Code

-"Удалить Tab-ы и пробелы в начале строки" Call("Scripts::Main", 1, "Multi_SR.js", `"(^[ \t]+)" "" 0 1 1 0 4 3`) Icon("%a\AkelPadImage.dll",150)


Рашифровка:
"(^[ \t]+)" - что искать
"" - чем заменять
0 - не Учитывать регистр
1 - Многострочно
1 - с Esc-последовательностями
0 - не заменять на функцию
4 - поиск Сначала
3 - Заменить всё

Quote
Не совсем для меня ясен 6-ой пункт «bReplaceFunction - заменять на функцию» — по подробней, пожалуйста.


В скрипте SearchReplace.js такой функционал тоже есть, небольшой пример:



"(Number($1)+1)" - это функция js скриптинга...
в данном случае найденные цифры увеличатся на единицу

с помощью Multi_SR.js будет так:

Code

-"Увеличить все цифры на единицу" Call("Scripts::Main", 1, "Multi_SR.js", `"(\d+)" "(Number($1)+1)" 0 0 0 1 4 3`) Icon("%a\AkelPadImage.dll",527)


[ps]Не стесняйтесь, пишите сразу на форум )[/ps]


 
Andrey_AДата: Среда, 21.11.2012, 14:47 | Сообщение № 3
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
В очередной раз немного модифицировал скрипт
сделал попроще
Добавил возможность замены/поиска из буфера и замены/поиска из выделения

/// (если в строке поиска или замены прописано #select#, то #select# заменяется на выделенный текст)
/// (если в строке поиска или замены прописано #bufer#, то #bufer# заменяется на содержимое из буфера обмена)
/// (если в строке поиска или замены необходимо использовать кавычки, то используйте двойной апостроф '')

Сохранение документа после замен

Code
-"Замена выделения содержимым из буфера" Call("Scripts::Main", 1, "Multi_SR.js", `#select# #bufer#`)
-"Вставить ссылку логотипа из буфера в шаблон" Call("Scripts::Main", 1, "Multi_SR.js", `"_логотип_" "#bufer#"`)


 
shveicarДата: Суббота, 05.01.2013, 20:17 | Сообщение № 4
Генерал-лейтенант

На сайте с: 18.05.2012
Город: Санкт-Петербург
Сообщений: 562
Награды: 10
Репутация: 23
Здравствуйте.
Хочу сообщить об одном моменте в скрипте Multi_SR.js.
Кнопка выглядит так:
Доступно только для пользователей
При попытке удаления фрагмента из таблицы стилей css например: Доступно только для пользователей а менно части url(../ - скрипт выдает ошибку.
Для таких вариантов - лучше использовать скрипт EvalCmd.vbs
Например кнопка Доступно только для пользователей
Спасибо Всем Разработчикам - облегчающим жизнь.
 
Andrey_AДата: Суббота, 05.01.2013, 21:45 | Сообщение № 5
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата (shveicar)
а менно части url(../ - скрипт выдает ошибку.

Добавил 9-й необязательный параметр, который экранирует спец. символы

Код
-"Удаление выделенного фрагмента (и других аналогичных) во всем документе" Call("Scripts::Main", 1, "Multi_SR.js", `#select# "" 0 0 0 0 4 3 1`)


 
Andrey_AДата: Понедельник, 11.03.2013, 00:59 | Сообщение № 6
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Поступил вопрос, я думаю кому-нибудь может пригодится

Цитата
почему данный скрипт вылетает с ошибкой? Ведь, вроде, всё правильно...
"Заменить прямые кавычки на (« ») в выделенном" Call("Scripts::Main", 1, "Multi_SR.js",`"''\S''" "«\S»" 0 0 1 0 8 3`)


Так работает

Код
-"Заменить прямые кавычки на (« ») в выделенном" Call("Scripts::Main", 1, "Multi_SR.js",`"''(\S*)''" "«$1»"  0 0 1 0 8 3`)


 
LonerDДата: Суббота, 18.10.2014, 03:36 | Сообщение № 7
Генерал-полковник

На сайте с: 24.03.2012
Сообщений: 106
Награды: 3
Репутация: 7
Andrey_A,
Можешь немножко доработать скрипт? (или опциональный параметр сделать или просто весь скрипт жёстко изменить).
Если нет выделения - должен обрабатываться весь файл. Если есть выделение - обрабатывать только выделенный фрагмент.


DreamLair.net
 
Andrey_AДата: Суббота, 18.10.2014, 04:56 | Сообщение № 8
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
LonerD,

Вставил параметр "x"

Код
-"Удалить переводы строк в выделении (либо во всём тексте)" Call("Scripts::Main", 1, "Multi_SR.js", `"\n" "" 0 1 1 0 x 3`) Icon("%a\AkelPadImage.dll",1051)


 
LonerDДата: Суббота, 18.10.2014, 18:14 | Сообщение № 9
Генерал-полковник

На сайте с: 24.03.2012
Сообщений: 106
Награды: 3
Репутация: 7
Спасибо, оперативно )))

DreamLair.net

Сообщение отредактировал LonerD - Суббота, 04.04.2015, 19:28
 
matrixGGДата: Вторник, 05.01.2016, 14:18 | Сообщение № 10
Сержант

На сайте с: 05.10.2012
Город: Киев
Сообщений: 28
Награды: 0
Репутация: 0
Andrey_A, если я правильно понимаю, то с параметром х команды удаления пустых строк и удаления более одной пустой строки в выделенном или в целом тексте будут выглядеть так:
Код
"Удалить пустые строки" Call("Scripts::Main", 1, "Multi_SR.js", `"(\n)+" "$1" 0 1 1 0 x 3`)
"Удалить более одной пустой строки" Call("Scripts::Main", 1, "Multi_SR.js", `"(\n\n)\n+" "$1" 0 1 1 0 x 3`)

По крайней мере эти конструкции работают и с выделенным и с целым текстом. Единственное, с выделенным наблюдается такой глюк. Если в выделенном первая строка пустая, то при "Удалить пустые строки" она не удаляется. Если первые две строки пустые, то удалится только одна из них, а одна пустая строка останется. Аналогично и с командой "Удалить более одной пустой строки", только остаются две пустые строки.
И, конечно же, с Новым годом!!!


Сообщение отредактировал matrixGG - Вторник, 05.01.2016, 14:20
 
hanckДата: Понедельник, 30.10.2017, 23:37 | Сообщение № 11
Лейтенант

На сайте с: 17.12.2013
Город: Claremont
Сообщений: 67
Награды: 0
Репутация: 0
вопрос по кнопке скрипта,
есть текстовый документ с цифрами, строки которого начинаются с цифры 6

скриптом убираю первые 6ки вручную так :

найти (^6([1-9])) заменить на \2 и меня устраивает результат, но хотелось бы сделать кнопку

"Убираем 6 в начлае строки" Call("Scripts::Main", 1, "Multi_SR.js",` "(^6([1-9]))" "\2"`) Icon("%a\AkelPadImage.dll",490)

я так понимаю ошибка в "\2" не понимаю как ее правильно записать.

P/s и если можно доработать кнопку, чтобы все строки сохранились, а мой результат "найти (^6([1-9])) заменить на \2" следовал далее .
т.е. было:
6500044
6500045

стало:
6500044
6500045
500044
500045
 
Andrey_AДата: Вторник, 31.10.2017, 06:24 | Сообщение № 12
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
hanck,
Код
"Убираем 6 в начале строки" Call("Scripts::Main", 1, "Multi_SR.js",` "^6([1-9])" "$1" 0 1`) Icon("%a\AkelPadImage.dll",490)


.


 
hanckДата: Пятница, 03.11.2017, 19:20 | Сообщение № 13
Лейтенант

На сайте с: 17.12.2013
Город: Claremont
Сообщений: 67
Награды: 0
Репутация: 0
Цитата Andrey_A ()
hanck,
[КОД:]
Выделить весь код
"Убираем 6 в начале строки" Call("Scripts::Main", 1, "Multi_SR.js",` "^6([1-9])" "$1" 0 1`) Icon("%a\AkelPadImage.dll",490)

Спасибо, а почему $1 а не \1 ?

возникла задача привести телефонные номера в одинаковый формат, например, в Текст - 79282000000 - Текст
В исходном тексте номера встречаются в таком виде:
8(928)000000
8928-200-00-00
+79282000000
9282000000
928-200-00-00
и т.д. и тп
на просторах интернета нашел выражение которое находит почти все эти номера в тексте:
^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$ (только вместо ^ ставлю .*), а вот как правильно заменять не понимаю



letter


Сообщение отредактировал hanck - Понедельник, 06.11.2017, 00:57
 
Andrey_AДата: Вторник, 07.11.2017, 02:07 | Сообщение № 14
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата hanck ()
Спасибо, а почему $1 а не \1 ?


Это одно и тоже, кто к чему привык.

Цитата hanck ()
возникла задача привести телефонные номера в одинаковый формат


В ваших условиях нет конкретики, а именно:
7, 8 - могут быть или не быть
пробелы, скобки, дефисы могут быть и не быть
С этим учётом я сделал регулярку, но она не точная (может получать 10 значные цифры в тексте)

Код
-"Причёсывание телефонных номеров" Call("Scripts::Main", 1, "Multi_SR.js", `"[\+]?([78])?[ (\-]{0,3}(\d{3})[ \-)]{0,3}(\d{3})[ \-]{0,3}(\d{2})[ \-]{0,3}(\d{2})" "$1$2$3$4" 0 1 1 0 "x" 3`) Icon("%a\AkelPadImage.dll",1494)


Для извлечения из текста информации можно воспользоваться скриптом:
getRegExp.vbs - Извлекает из выделенного текста информацию с заданным регулярным выражением

В него я внёс это регулярное выражение №11

Код
-"Извлечь возможные телефонные номера" Call("Scripts::Main", 1, "getRegExp.vbs", `11 1 1`) Icon("%a\AkelPadImage.dll",1578)


Для тестирования рег. выражений можно воспользоваться программой RegExp
Есть конечно разница между движком R.E. AkelPad и Autoit , но в большинстве случаев все совпадает

[img640]http://tc-image.3dn.ru/Image/AkelPad/0/tel_regexp.png[/img640]

.


 
hanckДата: Суббота, 11.11.2017, 21:01 | Сообщение № 15
Лейтенант

На сайте с: 17.12.2013
Город: Claremont
Сообщений: 67
Награды: 0
Репутация: 0
Цитата Andrey_A ()
[КОД:]
Выделить весь код
-"Причёсывание телефонных номеров" Call("Scripts::Main", 1, "Multi_SR.js", `"[\+]?([78])?[ (\-]{0,3}(\d{3})[ \-)]{0,3}(\d{3})[ \-]{0,3}(\d{2})[ \-]{0,3}(\d{2})" "$1$2$3$4" 0 1 1 0 "x" 3`) Icon("%a\AkelPadImage.dll",1494)


спасибо большое, чуть поправил " $1$2$3$4$5"

п.с. [ (\-]{0,3}(\d{3}) расшифруйте, пожалуйста, для чего нужен тут нужен символ "\" он экранирует? гоняю в Regexp с ним и без и никакой разницы не вижу.


Сообщение отредактировал hanck - Воскресенье, 12.11.2017, 00:51
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Интеллектуальные права и отказ от ответственности