Illustratorで正規表現で検索置換(今さら)

イラスター上で正規表現で検索置換。
既に先人達が作っておられます。
kamisetoさんたけうちとおるさんPICTRIXさん
(PICTRIXさんのRegXについては現在ページごと非公開のようす。残念。)
あとGitHubにはtenさんのも。
それぞれに特色がありますが。

自分としては正規表現の書き損じがとても心配なので、
置換前に結果をプレビューしたい。ぜひしたい。
先達の分でそれができるのはPICTRIX師匠のRegXだけなんですが、
ちとUIのカサがビッグで、触るトコが多すぎて一向に操作を覚えられない…
CS6未対応なのももったいないところで。

それはおいといても、果たして自作できるのか、と。
手間のない範囲でちょっと試してみたところ、
特にエスケープ文字に気を配らなくても手軽にpromptの引数をRegExpオブジェクトに渡せる事がわかったので
面倒なことになる直前までだけど作ってみました。
実際ここまででも結構ホネ折れましたが。。
そして、イラスターは全部BridgeTalk経由せにゃならん。。
POT2移植を諦めたのもこのせい。ぐぬぬ。

えー、シンプルでありながら置換結果をプレビューできる物、ということで
外観こんなんなりました。
20150105a

 

ダウンロードはここから。


ai_simpleRegExp.jsx
MacOSX10.9.5 IllustratorCS3、CS6で動作確認済み
2015.01.05.13:15 エスケープ(\)が使えない、重篤なミスを直しました。
スクリプトをエディタで開いて先頭に「ver_a」と書かれている場合は
お手数ですが再度ダウンロードしてくださいorz ver_b以降をお使いください。

2015.01.06.14:15 改行、タブなど
正規表現のエスケープ文字に絡む記号がターゲットに含まれる場合に帰ってこなくなるバグを修正。ダウンロード先は同じです。ver_c となります。すいませんごめん。
これにより、プレビュー窓がほとんど使い物にならなくなりましたw いずれ直します

2015.01.13.12:00 ver_e
複数段落を有するテキストが絡むと動かなかった件を含め、
こっぴどく直しました。すいませんすいません。
また、注意事項を1つ追加しました。再度確認お願いします

2015.11.16 ver_f
置換語内のメタ文字を正しく解釈するよう修正。
“\t” をタブ送り文字、”\r” を改行として扱います。
これにより後方参照も可能となりました。やったー。

2015.12.04 ver_g
上記に加え、強制改行(Unicode:0003)文字を
“\n”(Unicode:000A)で代用可能に。
かなり汚い書き方したのでバグ出るかも。

2017.04.18 ver_h
1年半前にアップしたver_gの置換部分にゴミを置き忘れていて動かなかったのを修正…
誰か教えてくれてもorz


 

検索対象となるのはドキュメント上の選択可能なテキストオブジェクト。
または、あらかじめ選択されているテキストオブジェクトがあればそれらだけが対象となります。

あそびかた

最初は「検索語」ボタン。ダイアログが出るので検索語を入力します。
ExtendScriptの仕様にのっとった物なので戻り読み(?<=hoge)と(?<!hoge)は使えません。

フラグオプションについてはInDesignやJeditなどでしか正規表現を扱わない人には目新しいかもですが
チェックを入れることで以下のご利益があります。
i……大文字、小文字の区別なし
m……複数行に対応
g……検索結果が1つのテキスト内に複数見つかる場合、すべて対象とします(オフでは先頭の1つのみ)

そしたら「まず検索」ボタン。←二番目なのに「まず」付けちゃった。。
検索結果は選択ハニーとなって示されます。
20150105b

1つでも見つかった場合、「まず検索」ボタンは操作不能となり、他のボタンが操作可能となります。
「中断」ボタンを押すか、全て置換し終わるか、まではボタンは元に戻りません。
ただ検索&選択したいだけなら、ここで終了。

置換するなら「置換語」ボタンで、置換語の入力。
グループ参照はInDesignのGREP検索置換同様$1〜$9を使います。
20150105c

「検索結果」と「置換予定」の欄に文字が出ます。これが直近のターゲットです。
ここから1つずつ順に置換するには「置換&次へ」ボタン。
置換が実行され、次の対象が「検索結果」と「置換予定」に反映されます。
まずってたら「スキップ」ボタンで、置換せず次へ。
「残りぜんぶドン」ボタンは考えずに感じてください。

で、以下、とても大事な注意点。
読まずに使って困った事になってエーンって泣いても知りません。

 

(日)テキスト属性

置換後は、テキストオブジェクト全体の先頭文字の属性に均されてしまいます。
不向きなオブジェクトにはまったく使えません。
先達のスクリプトにはここもしっかりクリアされている物もあります。
要は字数をカウントした上で1文字ずつ置換していかないといけない箇所なのです。
めんどくさい上に精査している心の余裕がないのでココの強化はまたの機会に。
20150105d

(月)威張るパレット

ScriptUIで作ったパレットが出ずっぱりなのですが、
これはプラグイン仕立てで作ったパネルと違い、ドキュメントウィンドウと主導権の取り合いをします。
パレットをいじった直後は、いかなるキーボード操作もドキュメントに届きません。
バージョンによっては問題ないかも知れません。CS4がとくに鬼門なので気をつけて。
作業時は一度ドキュメントウィンドウをカチしてアクティブにしてあげてください。
20150105e

(火)戻り読み非対応

上でも書きましたが、ExtendScriptの正規表現は戻り読み・否定戻り読みに対応しておりません。
なかったら作ればいいじゃない、となればかっこいいんですけども。
ウチはかっこわるいので作りません。
RegXでは可能です。どれだけ作り込んだんだって話ですよもう。
以上、反響如何、モチベ如何では強化するかも知れません。ウチはお金がありません。

(水)検索〜置換中は選択ハニーを変更しないでください(2015.01.13追記分)

検索結果を選択ハニーで表すのは前述の通りですが、
いざ置換の際にはその選択ハニーを頼りにテキストをつかまえます。
選択状況を変更すると誤動作します。

ですー。