2012-03-16 19 views
2

長時間のユーザ、初めての質問者。正規表現にはまったく新しいものです。私は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; 
    } 
} 

これは実際に動作します。それは私がしたいことをしています(それはまだ機能に入れていませんが、私はそこに着くでしょう)。 「プリント」のあるレイヤーを見つけて表示します。

これは私にとって理想的ではありませんでした。私はそれが一度正規表現を定義し、以下のように、ループのために、それを複数回使用する方が理にかなって思った:

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; 
    } 
} 

しかし、これが唯一のそれはできないですが、第一の層の上に行うことになっているものありません後続のレイヤーに一致させることができます。

これはなぜですか?ここで基本的なことを誤解しているような気がして、それが何であるか知りたいです。一致が見つかったとき

おかげで、 ブレンダン

答えて

2

は、正規表現はlastIndexのは はすべての一致が検出された後にのみ、0にリセットし、試合後に次の文字で、最後のインデックスポイントを をproperty-ました。

最初の一致を探しているだけなので、同じ文字列の次の一致を見つけることができます。ループ内のlastIndexを自分でリセットします。

for(i= 0; i<LayerLength; i++){ 
    myRegEx.lastIndex= 0; 
    str= openDocument.layers.item(i).name; 
    if(str.search(myRegEx)>= 0){ 
     openDocument.layers.item(i).visible= true; 
    } 
} 
+0

これは機能しました。とてもありがとうございます:)しかし、私はまだここで原則をよく理解していないので、フォローアップの時間があればそれを感謝します!追加した行を取り出し、forループの終了ブレースの直前にmyRegEx.lastIndexを表示するよう警告を出しました。最初の反復の後、それは9であった(レイヤーは "For Print Only"という意味である)が、1つおきに-1であった。あなたが正しく言ったことを理解していれば、毎回9時になるのではないでしょうか? – Brendan

+0

'/ g'が使用されていないときはどのように関連していますか? MDNからの引用 'このプロパティは、正規表現がグローバル検索を示すために" g "フラグを使用した場合にのみ設定されます。したがって、全く効果がないはずです。 – Qtax

+0

わかりませんが、うまくいきました。これは、InDesignがWebと比較してJSをどのように処理するかの違いに過ぎませんか?私は両者の違いの完全な程度を知るのに十分ではありません。 – Brendan