Скрипт "Поиск по набору регэкспов 2.1"

347 views
Skip to first unread message

Sclex

unread,
Nov 25, 2010, 3:11:38 PM11/25/10
to Fiction Book Editor
Скачать "Поиск по набору регэкспов v2.1": http://rghost.ru/3379649

Новая фича: сделал возможность поиска с учетом тегов. Например, по
такой команде:

tagRegExp("[а-яё]<emphasis>[а-яё]+?</emphasis>|<emphasis>[а-яё]+?</
emphasis>[а-яё]","i","Найдено: курсивность части слова.");

скрипт будет искать слово, содержащее по меньшей мере одну курсивную и
одну некурсивную буквы одновременно.

Команда addRegExp работает так же, как и работала.

TaKir

unread,
Nov 26, 2010, 2:58:23 AM11/26/10
to Fiction Book Editor
А начиная с какой версии ФБЕ это работает?

Sclex

unread,
Nov 26, 2010, 3:06:20 AM11/26/10
to Fiction Book Editor
On 26 ноя, 09:58, TaKir <epaper...@gmail.com> wrote:
> А начиная с какой версии ФБЕ это работает?
Сам поиск, по идее, работает в любой версии. А вот отображение в
строке статуса сообщения о типе найденной ошибке работает с версии то
ли 2.5, то ли 2.6.

TaKir

unread,
Nov 27, 2010, 3:14:42 AM11/27/10
to Fiction Book Editor
А команда addRegExp тоже с 2.5-2.6 версии только доступна?

Sclex

unread,
Nov 27, 2010, 3:18:31 AM11/27/10
to Fiction Book Editor
On 27 ноя, 10:14, TaKir <epaper...@gmail.com> wrote:
> А команда addRegExp тоже с 2.5-2.6 версии только доступна?
Должна работать в любой версии.

TaKir

unread,
Nov 27, 2010, 8:47:42 AM11/27/10
to Fiction Book Editor
А есть описание, как пользоваться?
Скрипт "Поиск по набору регэкспов v2.1" в папку положил, а функцию
addRegExp где взять (как подключить)?

Sclex

unread,
Nov 27, 2010, 9:19:27 AM11/27/10
to Fiction Book Editor
On 27 ноя, 15:47, TaKir <epaper...@gmail.com> wrote:
> А есть описание, как пользоваться?
Описание формата, в котором задаются регэкспы, - в самом скрипте,
нужно открыть в текстовом редакторе (кодировка utf-8). Если после
этого что-то будет непонятно - спросите, объясню.

Раньше был уже топик про этот скрипт, там объяснение, что он делает:
http://groups.google.com/group/fiction-book-editor/browse_thread/thread/4c432b60489a2cd7#
В том топике уже не дает отвечать, поэтому создал новый.

Sclex

unread,
Jan 3, 2011, 2:57:16 PM1/3/11
to Fiction Book Editor
Поиск по набору регэкспов v2.4
Скачать:
http://rghost.ru/3851835
или
http://scripts.fictionbook.org/files/SearchWithRegexpSet_v24.rar

Добавлены две фичи:

1) Теперь можно использовать конструкции типа look behind, т.е. (?
<= ... ) и (?<! ... ) , правда они могут стоять только в начале
регэкспа, но этого должно быть достаточно.

Эта фича позволяет делать такие регэкспы, чтобы выделялись только те
символы, которые нужны (раньше иногда приходилось выделять лишние
символы в начале).

2) Теперь можно задавать, в каких тегах искать по регэкспу, в каких
нет. Четвертый параметр (необязательный) функций addRegExp и tagRegExp
может выглядеть, например, так: "+poem -stanza +title".

"Плюс" - абзац должен быть вложен в указанный тег, "минус" - абзац
должен быть не вложен в указанный тег.

TaKir

unread,
Jan 3, 2011, 3:57:08 PM1/3/11
to Fiction Book Editor
В исходном виде эта версия у меня при нажатии горячей клавиши просто
переходит от буквы к букве, подряд. Причем надо обязательно встать
курсором на текст.
Иначе (если стоишь в самом начале документа - на хистори или
аннотации) ничего не происходит вообще.

On 3 янв, 22:57, Sclex <scl...@gmail.com> wrote:
> Поиск по набору регэкспов v2.4
> Скачать:http://rghost.ru/3851835

> илиhttp://scripts.fictionbook.org/files/SearchWithRegexpSet_v24.rar

Sclex

unread,
Jan 3, 2011, 3:59:45 PM1/3/11
to Fiction Book Editor
On 3 янв, 22:57, TaKir <epaper...@gmail.com> wrote:
> В исходном виде эта версия у меня при нажатии горячей клавиши просто
> переходит от буквы к букве, подряд.
Так и задумано. В строку статуса при этом выводится текст, что надо
задать список регэкспов, отредактировав скрипт. Единственную строку с
addRegExp с пустым регэкспом, которая изначально есть, надо стереть
или закомментировать.

Sclex

unread,
Jan 3, 2011, 4:04:28 PM1/3/11
to Fiction Book Editor
Эта строка с пустым регэкспом была сделана вследствие мысли, что если
задать заранее предопределенный набор регэкспов, пользователи FBE (в
составе которого будет скрипт) не обнаружат, что можно задавать
собственные регэкспы. Не все же читают эту гугль-группу.

Sclex

unread,
Jan 3, 2011, 4:21:14 PM1/3/11
to Fiction Book Editor
On 3 янв, 22:57, TaKir <epaper...@gmail.com> wrote:
> Иначе (если стоишь в самом начале документа - на хистори или
> аннотации) ничего не происходит вообще.
У меня даже в этом случае переходит на один символ вперед. Но на конце
абзаца - застревает. У вас, может быть, пустое хистори и пустая
аннотация, поэтому.

TaKir

unread,
Jan 3, 2011, 5:30:50 PM1/3/11
to Fiction Book Editor
Спасибо за скрипт!
Включение-выключение разных тегов давно хотелось )

TaKir

unread,
Jan 6, 2011, 12:10:39 PM1/6/11
to Fiction Book Editor
Подскажи, плиз, в чем может быть косяк? (версия фбе - 2.4 от 6 июня).

Пишу в скрипте
tagRegExp("(?<![а-яё])кго(?![а-яё])","i","Найдено: слово \"кго\" (\"кто
\" с опечаткой).");

этот вариант скрипт находит нормально.

а этот - нет...

tagRegExp("(?<![а-яё])нуда(?![а-яё])","i","Найдено: слово \"нуда
\" (\"ну да\" с опечаткой).");


И еще - на одном компе скрипт может одно и то же выражение находить, а
на другом - нет...

Пример:
addRegExp("^[З][\\x20\\xA0\\t\\n\\r\\f]","i","Найдено:буква З вместо
цифры 3 в начале строки");

У меня скрипт это выражение находит, а у Marina_Ch (если после З
используется неразрывный пробел) - нет...

On 3 янв, 22:57, Sclex <scl...@gmail.com> wrote:
> Поиск по набору регэкспов v2.4
> Скачать:http://rghost.ru/3851835

> илиhttp://scripts.fictionbook.org/files/SearchWithRegexpSet_v24.rar

Sclex

unread,
Jan 6, 2011, 1:24:12 PM1/6/11
to Fiction Book Editor
On 6 янв, 19:10, TaKir <epaper...@gmail.com> wrote:
> Пишу в скрипте
> tagRegExp("(?<![а-яё])кго(?![а-яё])","i","Найдено: слово \"кго\" (\"кто
> \" с опечаткой).");
>
> этот вариант скрипт находит нормально.
>
> а этот - нет...
>
> tagRegExp("(?<![а-яё])нуда(?![а-яё])","i","Найдено: слово \"нуда
> \" (\"ну да\" с опечаткой).");
Пока есть только такие предположения, что или внутри "нуда" в
документе есть какие-то теги (а tagRegExp ищет с учетом тегов), или
одна из букв слова "нуда", которое ты пытаешься найти, - латинская.

> Пример:
> addRegExp("^[З][\\x20\\xA0\\t\\n\\r\\f]","i","Найдено:буква З вместо
> цифры 3 в начале строки");
>
> У меня скрипт это выражение находит, а у Marina_Ch (если после З
> используется неразрывный пробел) - нет...

Это, наверное, зависит от того, включен ли показ неразрывных пробелов
видимым символом. Дело в том, что если неразрывный пробел в регэкспе
записан самим собой (символом с кодом 160), то скрипт это специально
обрабатывает, подменяя неразрывный пробел в регэкспе на тот символ,
которым неразрывные пробелы сейчас выводятся в тексте. А \\xA0 не
подменяется, потому что я раньше думал, что для того, чтобы корректно
произвести такую замену, придется проанализировать всю структуру
регэкспа. Но я, кажется, ошибся: достаточно только проверить, четное
или нечетное количество слэшей стоит перед "xA0". (Двойные слэши в
исходнике скрипт видит, анализируя строковую переменную, как
одинарные.) Если в исходнике написано "\\\\xA0", т.е. скрипт видит
четное число тире (2), то заменять не надо, т.к. такой фрагмент
регкэспа находит текстовую подстроку "\xA0", а не неразрывный пробел.

Если неразрывный пробел в регэкспе записывать самим собой, проблемы
быть не должно.

Выпущу новую версию с доработкой насчет "\\xA0", спасибо за репорт.

Sclex

unread,
Jan 6, 2011, 1:56:07 PM1/6/11
to Fiction Book Editor
Поиск по набору регэкспов v2.5:
http://scripts.fictionbook.org/files/SearchWithRegexpSet_v25.rar
или
http://rghost.ru/3887881

Единственное изменение - теперь в регэкспах можно писать "\\xA0", и
это будет находить неразрывный пробел независимо от того, каким
символом показываются неразрывные пробелы в документе.

Sclex

unread,
Jan 6, 2011, 2:04:47 PM1/6/11
to Fiction Book Editor
On 6 янв, 20:24, Sclex <scl...@gmail.com> wrote:
> Если в исходнике написано "\\\\xA0", т.е. скрипт видит
> четное число тире (2),
Не "тире", а "слэшей", конечно.

TaKir

unread,
Jan 6, 2011, 2:39:26 PM1/6/11
to Fiction Book Editor
Спасибо, проверил новую версию, проблема не ушла (
Отправил тебе на почту маленький тестовый файлик и свой
редактированный скрипт.
Может удастся разобраться, в чем косяк...

On 6 янв, 21:56, Sclex <scl...@gmail.com> wrote:
> Поиск по набору регэкспов v2.5:http://scripts.fictionbook.org/files/SearchWithRegexpSet_v25.rar

> илиhttp://rghost.ru/3887881

Sclex

unread,
Jan 6, 2011, 2:49:27 PM1/6/11
to Fiction Book Editor
On 6 янв, 21:39, TaKir <epaper...@gmail.com> wrote:
> Спасибо, проверил новую версию, проблема не ушла (
> Отправил тебе на почту маленький тестовый файлик и свой
> редактированный скрипт.
Протестировав у себя, подтверждаю, что действительно имеет место какая-
то ошибка в скрипте. Буду разбираться.

Sclex

unread,
Jan 6, 2011, 3:33:26 PM1/6/11
to Fiction Book Editor
Причина ошибки с регэкспом, ищущим "кго", была в том, что когда
получаешь html-код выделения, IE, оказывается, в него вставляет
переносы строк, и из-за этого сбивался подсчет смещения в строке.
Поправил.

Поиск по набору регэкспов v2.6:
http://rghost.ru/3889371
или
http://scripts.fictionbook.org/files/SearchWithRegexpSet_v26.rar

TaKir

unread,
Jan 6, 2011, 5:09:58 PM1/6/11
to Fiction Book Editor
Спасибо, теперь все отлично работает! )

TaKir

unread,
Jan 6, 2011, 6:05:19 PM1/6/11
to Fiction Book Editor
PS
в теле скрипта номер версии остался 2.5 )

TaKir

unread,
Jan 12, 2011, 12:29:51 PM1/12/11
to Fiction Book Editor
Подскажи, плиз, можно ли как-то избежать сообщения о замедлении работы
ИЕ? Оптимизировать что-то в скрипте?

Скрипт как бы подвисает на тяжелых, но чистых текстах, т.е. когда
много искомых вхождений в документе - все ок, а когда он долго ищет по
большому тексту, то иногда говорит, что мол "сценарий на данной
странице замедляет работу ИЕ, при продолжении сценария компьютер может
не реагировать, прервать сценарий? Да-Нет"?

On 6 янв, 23:33, Sclex <scl...@gmail.com> wrote:

Марина

unread,
Jan 12, 2011, 12:36:43 PM1/12/11
to Fiction Book Editor
подтверждаю, есть такое...

Sclex

unread,
Jan 12, 2011, 1:28:32 PM1/12/11
to Fiction Book Editor
> Подскажи, плиз, можно ли как-то избежать сообщения о замедлении работы
ИЕ?
Можно отключить это сообщение. Попробуйте импортировать reg-файл из
архива:

http://scripts.fictionbook.org/files2/Turn_off_'script_slows_down_IE'.rar
или
http://rghost.ru/3915570

Сообщите, сработало или нет. Информация про ключ реестра, изменяемый
этим reg-файлом, тут:
http://support.microsoft.com/kb/175500/ru

Sclex

unread,
Jan 12, 2011, 1:26:16 PM1/12/11
to Fiction Book Editor
On 12 янв, 19:29, TaKir <epaper...@gmail.com> wrote:
> Подскажи, плиз, можно ли как-то избежать сообщения о замедлении работы
> ИЕ?
Можно отключить это сообщение вообще. Для этого нужно импортировать в
реестр reg-файл из архива:

Сообщите, сработало или нет. Подробности про ключ реестра, который
изменяется этим reg-файлом, тут:
http://support.microsoft.com/kb/175500/ru

TaKir

unread,
Jan 12, 2011, 4:29:09 PM1/12/11
to Fiction Book Editor
Сработало, спасибо.
Но странно, что так тормозит скрипт... Вроде генуборка более
навороченный скрипт, а срабатывает быстро очень )

Sclex:

Марина

unread,
Jan 12, 2011, 4:36:32 PM1/12/11
to Fiction Book Editor
Спасибо, помогло.

А можно еще вопрос по регэкспам?
А то я уже всю голову сломала((((
Можно ли найти все трехбуквенные слова из согласных, кроме некоторых?
Типа кхм, ммм и т.д.? Как найти все - понимаю, а вот как исключить из
поиска несколько слов - никак не придумаю((((

On 12 янв, 21:26, Sclex <scl...@gmail.com> wrote:
> On 12 янв, 19:29, TaKir <epaper...@gmail.com> wrote:> Подскажи, плиз, можно ли как-то избежать сообщения о замедлении работы
> > ИЕ?
>
> Можно отключить это сообщение вообще. Для этого нужно импортировать в
> реестр reg-файл из архива:
>

> http://scripts.fictionbook.org/files2/Turn_off_'script_slows_down_IE'...
> илиhttp://rghost.ru/3915570

Марина

unread,
Jan 12, 2011, 4:12:43 PM1/12/11
to Fiction Book Editor
Спасибо, помогло.

А можно еще вопрос по регэкспам?
А то я уже всю голову сломала((((
Можно ли найти все трехбуквенные слова из согласных, кроме некоторых?
Типа кхм, ммм и т.д.? Как найти все - понимаю, а вот как исключить из
поиска несколько слов - никак не придумаю((((

On 12 янв, 21:28, Sclex <scl...@gmail.com> wrote:
> > Подскажи, плиз, можно ли как-то избежать сообщения о замедлении работы
>
> ИЕ?
> Можно отключить это сообщение. Попробуйте импортировать reg-файл из
> архива:
>

> http://scripts.fictionbook.org/files2/Turn_off_'script_slows_down_IE'...
> илиhttp://rghost.ru/3915570

Sclex

unread,
Jan 14, 2011, 12:16:27 PM1/14/11
to Fiction Book Editor
On 12 янв, 23:29, TaKir <epaper...@gmail.com> wrote:
> Но странно, что так тормозит скрипт... Вроде генуборка более
> навороченный скрипт, а срабатывает быстро очень )
Говоря "тормозит", ты имеешь в виду только сообщение, что скрипт
замедляет работу IE, или на глаз заметно, что скрипт медленно
работает? Потому что грузят проц скрипты одинаково - грузят настолько,
насколько возможно: таймеры не используются, соответственно код
выполняется непрерывно до момента окончания работы скрипта. То, что
есть разница в количестве инструкций javascript'а, выполняемых за
секунду (на основании чего выдается сообщение), - не показатель,
потому что разные инструкции выполняют разный объем работы.

TaKir

unread,
Jan 15, 2011, 3:25:43 AM1/15/11
to Fiction Book Editor
Торможение заметно "на глаз" )
Сравнивая с генуборкой, которая за 15 секунд здоровенный текст
обрабатывает целиком, вижу, что поиск по регэкспам может секунд 10
искать следующее вхождение в этом же тексте, если текст довольно
чистый и таких вхождений немного.
Может оно так и надо, я не знаю...

Sclex

unread,
Jan 16, 2011, 3:17:43 AM1/16/11
to Fiction Book Editor
Скрипт "Поиск по набору регэкспов v2.7":

Скачать:
http://rghost.ru/3955874
или
http://scripts.fictionbook.org/files/SearchWithRegexpSet_v27.rar

Немного улучшил код, что, впрочем дало лишь незначительный прирост
скорости (выигрыш в три секунды из двадцати девяти).

Теперь у функций addRegExp и tagRegExp появился пятый параметр:
ограничение на длину строки, которую могут находить конструкции
просмотра назад, т.е. (?<= ...) и (?<! ... ). Установление ограничения
в пределе позволяет увеличить скорость работы скрипта в 2.5 раза. Если
регэксп использует для просмотра назад код (?<![а-яё]) , то пятый
параметр можно прописать равным единице, что обеспечит максимальную
скорость работы.

Больше серьезно увеличить скорость скрипта не получится, т.к. проверка
показала, что больше всего времени тратится на команду exec,
производящую собственно поиск. "Генеральная уборка" работает быстрее,
потому что она использует команду replace, которая одна выполняет
много замен, а команда exec вызывается для каждого одиночного поиска
отдельно. Обойтись без exec в "Поиске по набору", однако, невозможно.

TaKir

unread,
Jan 16, 2011, 10:58:09 AM1/16/11