Работают ли RegExp'ы в ExtendScript?

Статус
Закрыто для дальнейших ответов.

ramiraz

Участник
Топикстартер
Сообщения
5
Реакции
0
Такой вопрос: что надо сделать, чтобы работали регулярные выражения?

Пример:
Код:
with(app) {

var myStory = selection[0];
var myRegExp = new RegExp("\s+","gi");

for(i=0; i < selection[0].parentStory.paragraphs.length; i++){

	var myParagraph = selection[0].paragraphs.item(i);
	var string = new String(myParagraph.contents);
	myParagraph.contents = string.replace(myRegExp,"\s");

	}
}
Как мне кажется скрипт должен заменить множество пробелов одним. Но почему-то не работает. Распознает последовательность \s просто как букву s и заменяет множество вхождений s одним.
 

Maks_Tsofin

15 лет на форуме
Сообщения
150
Реакции
3
Ответ: Работают ли RegExp'ы в ExtendScript?

А что нельзя просто заменить два пробела на один? И сделать это несколько раз
 

lev

Модератор
20 лет на форуме
Сообщения
2 147
Реакции
2 072
Ответ: Работают ли RegExp'ы в ExtendScript?

Код:
with(app) {

var myStory = selection[0];
var myRegExp = new RegExp("\\s+","gi");

for(i=0; i < selection[0].parentStory.paragraphs.length; i++){

	var myParagraph = selection[0].paragraphs.item(i);
	var string = new String(myParagraph.contents);
	myParagraph.contents = string.replace(myRegExp," ");

	}
}
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Работают ли RegExp'ы в ExtendScript?

Подобное использование RegEx (напрямую с .contents) убьет находящиеся в Story и таблицы, и встроенную графику. Кроме того, если там есть локальное оформление – все сползет к чертям собачьим.
 

ramiraz

Участник
Топикстартер
Сообщения
5
Реакции
0
Ответ: Работают ли RegExp'ы в ExtendScript?

lev: Вай, спасибо! RegExp'ы работают! :)
vbatushev: Не подскажете - как оптимально действовать не через .contents?
И если возможно: задача была расставлять правильные пробелы в последовательностях И.О. Фамилия.
Теперь все нормально, но никак не могу найти в примерах как поставить тонкий пробел между именем и отчеством. idSpecialCharacters.idThinSpace свойство какого объекта?
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Работают ли RegExp'ы в ExtendScript?

Thin Space == \u2009
Вообще все это можно увидеть с помощью простой утилиты – Charmap, входящей в состав Windows.

Не подскажете - как оптимально действовать не через .contents?
Вариантов несколько. Один из них используется в маковском скрипте TextCleanupX. Текст выгружается в Adobe InDesign Tagged Text, обрабатывается и импортируется на место. Минус – встроенной графике кердык.
Я использую (в скрипте sZam 4.x) другой метод. Однако автором идеи являюсь не я, поэтому разглашать принцип действия не буду, уж простите.
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Работают ли RegExp'ы в ExtendScript?

sZam 4.0 как был так и есть.
sZam 4.1 существует без help'а, только это и является препятствием к его "релизности".
К тому же я пытаюсь решить проблему таблиц, обрабатываются они недопустимо медленно.
Плюс включение поддержки регулярных выражений в поиске и замене тут же выявило идиотскую реализацию оных в VB. Теперь рисую этакого кентавра о шести ногах :)
 

lev

Модератор
20 лет на форуме
Сообщения
2 147
Реакции
2 072
Ответ: Работают ли RegExp'ы в ExtendScript?

включение поддержки регулярных выражений в поиске и замене тут же выявило идиотскую реализацию оных в VB. Теперь рисую этакого кентавра о шести ногах
А, нельзя ли, подробнее об ошибках реализации, или дать ссылочку, если это уже обсуждалось.
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Работают ли RegExp'ы в ExtendScript?

Написал. Стер. Потому как беру назад свои слова об ошибках (неудобства какие-то были, но это не очень существенно, в общем, погорячился). Дело не в ошибках, дело в моем стремлении избавиться от использования в скрипте внешних модулей (их на данный момент два – поддержка XML и поддержка RegEx). Вот.
 

Glutton

12 лет на форуме
Сообщения
885
Реакции
1
Ответ: Работают ли RegExp'ы в ExtendScript?

А если вот так (только в профиль?)

var myParagraph = selection[0].paragraphs.item(i);
myParagraph.contents = myParagraph.contents.replace(myRegExp," ");

Можно также проверять длинны замены. Если "бла-бла-бла" заменить на "бла-бла ", то форматорование не пропадет (не уедит).
 

lev

Модератор
20 лет на форуме
Сообщения
2 147
Реакции
2 072
Ответ: Работают ли RegExp'ы в ExtendScript?

Если "бла-бла-бла" заменить на "бла-бла ", то форматорование не пропадет (не уедит).
Думаю пропадет. Насколько я понимаю, слет форматирования связан с убийством границ стилевой разметки. Например, имеем: <стиль1>слово1 пробел</стиль1><стиль2>пробел слово2</стиль2> (я не изучал разметки индизайна, она может отличаться, как размечены таблицы, и встроенная графика я тем более не знаю, но надеюсь смысл я передам верно) Наш скрипт выловит двойной пробел "пробел</стиль1><стиль2>пробел" и заменит его на одинарный, в результате чего мы получим <стиль1>слово1 пробел слово2</стиль2>, то есть разметка слетит. Предположительные методы борьбы: проверять стиль пойманных последовательностей пробельных элементов и в зависимости от этого принимать решения, при едином стиле - менять, иначе - думать.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Ответ: Работают ли RegExp'ы в ExtendScript?

Именно что думать :)
 

Glutton

12 лет на форуме
Сообщения
885
Реакции
1
Ответ: Работают ли RegExp'ы в ExtendScript?

Буквы и стили размещаются физически в разных кусках памяти :) Есть одна строчка с буквами и еще одна со стилями... то есть Для полужирных "de".
abcdefgh - буквы (contents)
n__b_n__ - Стиль (n - "основной", b - "полужирный")

После удаления буквы "d" Полужиным будет "ef".

abcefgh - буквы (contents)
n__b_n_ - Стиль (n - "основной", b - "полужирный")

А вот замену пробеллов можно сделать и стандартными методами :)...
 

lev

Модератор
20 лет на форуме
Сообщения
2 147
Реакции
2 072
Ответ: Работают ли RegExp'ы в ExtendScript?

Буквы и стили размещаются физически в разных кусках памяти
возможно Вы и правы, я редко работаю в ИнДизайне, но простейший поставленный мною опыт говорит об обратном. (надеюсь речь идет о замене скриптами, а не средствами редактирования или поиска-замены самого ИнДизайна)
А вот замену пробеллов можно сделать и стандартными методами ...
\s - любая последовательность пробельных элеементов - разбивающих, неразбивающих, узких, табуляций и т.д. Если все это легко ловится стандартными средствами в один прием, то я рад. Приведите, пожалуйста, примеры, непохожие на сообщение №2 в этой ветке.
 
Статус
Закрыто для дальнейших ответов.