Регулярное выражение для выбора указанных абзацев InDesign

Я пытаюсь найти регулярное выражение для использования в InDesign, которое могло бы выбирать каждый n-й абзац в текстовом поле (n-й как случайный, а не как последовательность).

Например, в следующем примере я хотел бы иметь возможность выбрать 2-й, 3-й и 5-й абзацы, введя 2,3 и 5 где-то в регулярном выражении.

введите здесь описание изображения


person gmorissette    schedule 23.08.2014    source источник
comment
Почему вы думаете, что регулярное выражение — правильный инструмент для этой работы?   -  person Nir Alfasi    schedule 23.08.2014
comment
Я не знаю другого варианта в InDesign для автоматизации этой задачи. Просто предположение   -  person gmorissette    schedule 23.08.2014
comment
Как насчет разделения текста на \n\n и обработки каждой части в разделении как абзаца?   -  person Nir Alfasi    schedule 23.08.2014
comment
Поскольку цель состоит в том, чтобы использовать GREP, чтобы избежать индивидуального стиля каждого указанного абзаца.   -  person gmorissette    schedule 23.08.2014
comment
Вы не можете выделить несмежный текст в InDesign, поэтому вся предпосылка неверна. Для этого нужен скрипт, а не регулярное выражение.   -  person Jongware    schedule 23.08.2014
comment
Да, хорошо, тогда я должен удалить этот вопрос? В противном случае вы можете опубликовать свой комментарий как ответ, я отмечу его как правильный   -  person gmorissette    schedule 23.08.2014


Ответы (2)


Это нужно сделать в виде скрипта. См. ниже пример для начала. Сценарий предполагает, что текстовый фрейм, содержащий ваши абзацы, выбран при запуске сценария! Примечание: нет никаких усилий для проверки/обработки ошибок (например, предоставление нечислового ввода для номеров абзацев). Вам нужно будет добавить это самостоятельно. Вы также можете изменить ввод, чтобы принять список номеров абзацев, разделенных запятыми, если это необходимо.

var doc = app.activeDocument;
var frame = app.selection[0];

var para = parseInt(prompt("Paragraph:", ''));    

//replace TestStyle with your desired style name
var style = app.activeDocument.paragraphStyles.item('TestStyle');

frame.parentStory.paragraphs[para - 1].appliedParagraphStyle = style;
person Anna Forrest    schedule 04.09.2014
comment
Я думаю, что здесь что-то мне не хватает. Я запускаю сценарий, появляется приглашение, но затем мне удается применить стиль только к одному абзацу в текстовом поле. Допустим, я ввел 1,2, только к первому абзацу будет применен стиль. В остальном все кажется безупречным. - person gmorissette; 05.09.2014
comment
Приведенный выше код является лишь примером. Вам нужно изменить его в соответствии с вашими потребностями - person Anna Forrest; 05.09.2014
comment
Я совсем не владею JS. Любой совет? - person gmorissette; 05.09.2014
comment
Обратитесь к этому вопросу о том, как разбить строку в javascript. stackoverflow.com/questions/96428/. Затем вам нужно будет перебрать все значения в массиве, применяя стиль абзаца к каждому значению — 1 абзац. - person Anna Forrest; 05.09.2014
comment
Хм... Хотел бы я понять. Я так виноват. Возможно, вы могли бы просто отредактировать свой ответ (сам код JS). Я хотел бы отметить это как принятое и повысить вашу репутацию. - person gmorissette; 05.09.2014
comment
Потому что тогда вы ничему не научитесь и просто вернетесь сюда в следующий раз, когда у вас возникнет вопрос. Лучше попробуйте и отредактируйте свой вопрос с помощью последних попыток. Тогда я могу дать вам больше указаний на то, что вам все еще не хватает. - person Anna Forrest; 05.09.2014
comment
4 начальные строки + следующий код = успех с номерами абзацев, помеченными как CSV //// for (var i = 0 ; i ‹ paras.length ; i++) { frame.parentStory.paragraphs[parseInt(paras[i]) - 1] .appliedParagraphStyle = стиль; } - person gmorissette; 15.09.2014

/([^\n]+\n)/g

затем используйте группировку, чтобы извлечь нужные абзацы.

person Jason Hu    schedule 23.08.2014
comment
Где я должен точно вводить номера абзацев? - person gmorissette; 23.08.2014
comment
@luimeme вы делаете это функцией, и номер вашего абзаца используется при группировке, но в регулярном выражении. - person Jason Hu; 23.08.2014
comment
Что именно вы подразумеваете под группировкой? Я вообще не знаком с регулярным выражением - person gmorissette; 23.08.2014
comment
@luimeme зависит от вашего языка, глобальное сопоставление должно возвращать список, в котором все элементы должны соответствовать регулярному выражению. в perl он идет my @matched = m/([^\n]+\n)/g;, затем просто $match[$paras[0]] и так далее, чтобы извлечь вашу цель. - person Jason Hu; 23.08.2014
comment
Хм, хорошо, в InDesign вы можете ввести только одну строку кода в диалоговом окне GREP. Нет нескольких операций. Любой способ добиться того, что я хотел бы сделать сразу? - person gmorissette; 23.08.2014
comment
@luimeme, если ваше программное обеспечение не позволяет использовать дополнительный код, регулярное выражение не сможет достичь вашей цели. - person Jason Hu; 23.08.2014