選択文字をドキュメント中から正規表現で検索して置換

今回の作品集のお仕事。
読めない名前の出現率が高くて困ったちゃん。
作品にフルネームのキャプションを入れてかなければいけないんだけど、
なぜか手がかりになるのが苗字しかない。
そこで、
例えば「山田.{2,3}」と入力すれば、
山田花子」だったり「山田太郎」だったり「山田一二三」を
ページの最後にある作者一覧から取得できれば楽じゃないのという、
なまけもの根性から生まれたスクリプト

汎用性があるかどうか?
どうだろう?

ダウンロード

//ドキュメント中に存在するテキストを正規表現で検索して置換。複数ある場合は手で修正。
//2009-09-17 とりあえず
(function(){
#include 'c.js';
function myerror (message){alert(message)};
if(app.activeDocument.selection == 0)return myerror('検索する文字列を選択してください。');
//
var SELECTION = app.activeDocument.selection[0];
//
if(!SELECTION.constructor.name.match('Word|TextStyleRange|Text|Paragraph|Character'))return myerror('検索する文字列を選択してください。');
//検索の初期化
app.findGrepPreferences = app.changeGrepPreferences =NothingEnum.nothing;
//検索オプション
app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか
app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか
app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか
app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
////検索文字の設定
app.findGrepPreferences.findWhat = SELECTION.contents;
//
var HIT_WORD = [];
//
c(app.activeDocument.findGrep(true)).each(function(){SELECTION.contents !== this.contents && HIT_WORD.push(this.contents);});
//重複の削除
HIT_WORD = uniq(HIT_WORD);
if(HIT_WORD.length == 0)return myerror(SELECTION.contents +'にヒットする文字列が見つかりませんでした。')
SELECTION.contents =  HIT_WORD.length > 1 ?  "["+HIT_WORD.join (',') +"]" : HIT_WORD[0];
alert('検索が終わりました。');
return;
//UNIQ
function uniq(arr){
    for (var i=0,l=arr.length; i<l; i++) {
        for (var j=0; j<i; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(i--, l-- && 1);
            }
        }
    }
    return arr;
}
})();

作者一覧、こればっかりはスクリプトでは
どうしようもないので我慢して打ち込みました。