スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



mirrorMan - 正規表現フィルタ

大量のファイルからキーワードで検索するとき、思わず正規表現でしたくなることがあります。思わずしたくなるといっても性器表現ではありません。Regular、「正規」。この日本語訳もどうかと思います。今はやりの雇用問題でいうと「非正規」社員は存在が「イレギュラー」なメンバーかということになってしまいます。正規表現はそういう意味での正規な表現ではなくて、
そんなことはさておき、エクスプローラのワイルドカード検索のかわりに正規表現でフィルタします。

右クリックメニュー内のテキストボックスにキーワードを入力し、エンターキーで実行します。右の画像の場合、mirで始まり.htaで終わるファイルを抽出しています。キャンセルはESCキーです。




ソースはこんな感じです。
function jqContextMenuDsp(){ //contextmenu.r2.js:singleton menu id
if(! document.all.jqContextMenu) return false;
return (jqContextMenu.style.display =="block");
}
右クリックメニューに使用しているcontextmenu.r2.jsはsingletonなノードIDがあるので、これを利用しています。
IEの場合、存在しないノード(タグのid属性)を参照すると、変数が定義されていないとエラーを返すので、document.allからノードツリーをたどって確認します。存在すれば、displayプロパティがblockかどうかを返します。
if(jqContextMenuDsp()){
try{ var re = filterLstBox[2].value?new RegExp(filterLstBox[2].value,'i'):/./}
catch(e){wsh.popup(e.description, 1,document.title,64); return}
}
テキストボックスに値が入力されていれば、オブジェクト変数reにRegExpでnewしておきます。
try{}catch{}しているのは、ユーザが入力した正規表現のコンパイルエラーを逃がすためです。
正規表現式でなかった場合、このようなポップアップで知らせます。

regpop.png

あとは、フォルダのコレクションで回してhtmlを生成する部分で次のようにひっかけています。
var itm, ssh = new ActiveXObject("Shell.Application");
var erfo = ssh.NameSpace(er);
for(var fc=new Enumerator(erfo.Items()); !fc.atEnd(); fc.moveNext()){
itm = fc.item();
if(re) if(!re.test(itm)) continue;

}
スポンサーサイト



trackback


この記事にトラックバックする(FC2ブログユーザー)

mirrorMan v1.80 正規表現ライブサーチ

正規表現は入力一文字ごとに検索条件が確定するわけではありません。 いきなり「*」を入力しても、繰り返し対象の前の一文字がないのでだめ...

comment

Secret

while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。