InDesign может выполнять расширенный поиск-изменение, также известный как поиск-замена, с использованием правил GREP, также известных как регулярные выражения, также известные как регулярные выражения, которые позволяют использовать все виды подстановочных знаков и автоматизацию.
Есть ли способ сделать то же самое в Illustrator?
Я сделал сценарий для этого. Я тестировал его в Illustrator CS6 на Mac и в Windows.
Он выполняет регулярное выражение для поиска и замены текста в выбранных элементах или для всего текста, если ничего не выбрано.
Он работает с точечным текстом, текстом области и текстом на пути и не возражает, если в выделение включены нетекстовые элементы.
Примечание: похоже, существует ошибка, из-за которой иногда не удается найти текст в выбранных группах. Если вы столкнулись с этим, попробуйте запустить скрипт, ничего не выделенный, или разгруппировать.
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;
var find = prompt("Find: (Text or GREP/regex)","");
if(find !== null){
var replace = prompt("Replace: (Text or GREP/regex)","");
if(replace !== null){
var changes = 0;
for(var i=0;i<scope.length;i++){
var text = scope[i];
var string = text.contents;
if(typeof string == "string"){
var newstring = string.replace( new RegExp(find, 'g'), replace);
if (newstring != string) {
changes++;
var paragraphsArray = newstring.split("\n");
text.paragraphs.removeAll();
for(var ii=0;ii<paragraphsArray.length;ii++){
text.paragraphs.add(paragraphsArray[ii]);
}
}
}
}
alert( changes==1 ? "1 text object changed" : changes + " text objects changed");
}
}
Любое правило GREP из InDesign должно работать — я рекомендую создать и протестировать правило в InDesign Paragraph styles > GREP rules
с некоторым образцом текста и установленным флажком Preview, а затем скопировать код GREP в этот сценарий — что проще, чем метод проб и ошибок с этим сценарием.
В Replace
, вы можете использовать $1
для всего, что соответствует первой паре скобок ( (
to )
), $2
для второй и т. д.
Вот несколько примеров, которые я тестировал с ним:
test
hello
test
, tent
и te!t
т. д. Примечание . Если вы хотите, чтобы в вашем поиске был обычный символ .
, вам нужно поставить его \
перед ним, чтобы он не рассматривался как специальный символ, например This be a sentence\. This be another\.
- это верно для большинства знаки препинания:
te.t
hello
,
и .
):
(\d+\,?\d*\.?\d*)
$1%
+
(перед этим есть пробел + который обрезается)
(пробел)var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;
изменить на
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.textFrames;
activeDocument.textFrames
также нацелен точечный текст, текст на пути и т. д., или он будет нацелен только на текстовые фреймы с фиксированной ограничивающей рамкой?
Гуаньхуа Ван