長年のユーザー、初めての質問者。正規表現は非常に新しいものです。私はInDesignでの生活を楽にしようとしているデザイナーなので、これが簡単なものである場合はしばらくお待ちください:)
マスターファイルからテンプレートファイルにページをプルするスクリプトに取り組んでいます。これらのマスターページの一部には、最終ファイルを印刷用にPDFにエクスポートするときに使用されるレイヤーがあります。最終ファイルが電子メールにエクスポートされるときに、他のレイヤーが使用されます。したがって、誰かが電子メール用に保存するオプションをチェックした場合、印刷レイヤーを非表示にし、電子メールレイヤーを表示したいと思います。簡単ですが、コードを関数として合理化して、変数として「print」または「email」を指定できるようにしたいと思いました。そうすれば、スクリプトはそれを「print」を含むすべての変数に一致させます。正規表現の領域。
var openDocument = app.documents.item(0);
var LayerLength = openDocument.layers.length;
wordToMatch = "print";
for (i=0;i<LayerLength;i++)
{
myRegEx = new RegExp(wordToMatch,"i");
str = openDocument.layers.item(i).name;
if (str.search(myRegEx) >= 0)
{
openDocument.layers.item(i).visible = true;
}
}
したがって、これは実際に機能します。それは私がやりたいことをします(まだ関数に入れていませんが、そこに着きます)。「印刷」が含まれているレイヤーを見つけて、表示します。
しかし、これは私には理想的ではなかったようです。次のように、正規表現を1回定義してから、forループで複数回使用する方が理にかなっていると思いました。
wordToMatch = "print";
myRegEx = new RegExp(wordToMatch,"i");
for (i=0;i<LayerLength;i++)
{
str = openDocument.layers.item(i).name;
if (str.search(myRegEx) >= 0)
{
openDocument.layers.item(i).visible = true;
}
}
ただし、これは最初のレイヤーで実行することになっていることだけを実行し、後続のレイヤーと一致させることはできません。
どうしてこれなの?ここで根本的なことを誤解しているような気がしますが、それが何なのか知りたいです。
ありがとう、ブレンダン