contents内の正規表現について

[7755]contents内の正規表現について 投稿者:meg 投稿日:2013/08/20 18:46:13
【環境】Mac OS X 10.6.8 / indesign CS4

indesignのスクリプトを勉強中です。
ドキュメント内の指定した内容のテキストボックスを削除するにあたり
以下のものを用意しました。

var myItems = app.activeDocument.allPageItems;
for ( var i = myItems.length-1; i >= 0; i-- )
if (myItems[i].constructor.name == 'TextFrame'&& myItems[i].contents == "280cm")
myItems[i].remove();

特に問題なく動作したのですが、"280cm"部分の数値が
今後変わりそうなので、正規表現を使えるとありがたいなと考えております。
“(\d+)cm”のように、数値が変わっても対応できるように
contents内に組み込むことはできるのでしょうか?

どうぞよろしくお願いいたします。
[7756]Re: contents内の正規表現について 投稿者:流星光輝 投稿日:2013/08/20 18:52:19
myItems[i].contents == "280cm"

myItems[i].contents.match(/\d+cm/)==true

たぶん
[7757]Re: contents内の正規表現について 投稿者:meg 投稿日:2013/08/21 11:03:56
流星光輝様
返信どうもありがとうございました。ご指摘いただいた箇所を修正し、下記の形に直して検証してみましたが、うまく動作させることができませんでした。さしかえかたを間違えているのでしょうか……?

var myItems = app.activeDocument.allPageItems;
for ( var i = myItems.length-1; i >= 0; i-- )
if (myItems[i].constructor.name == 'TextFrame'&& myItems[i].contents.match(/\d+cm/)==true)
myItems[i].remove();
[7759]Re: contents内の正規表現について 投稿者:sekita 投稿日:2013/08/21 11:58:17
横から失礼。

myItems[i].contents.match(/\d+cm/)==trueではなく、
myItems[i].contents.match(/\d+cm/)でしょう。

matchメソッドは一致した文字列を返すので、
前者はmyItems[i].contents.match(/\d+cm/)の結果(280cmなどの文字列)が
trueという値かどうかという真偽になるので、falseとなり、条件は成立しません。
[7762]Re: contents内の正規表現について 投稿者:meg 投稿日:2013/08/21 12:14:54
sekita 様
返信どうもありがとうございます。動作確認をし、無事処理することができました。詳しい理由もいただき、大変参考になりました。


流星光輝様
おかげさまで汎用性が高まり、作業を軽減できそうです。
どうもありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)