/* (Tab=4) [概要] 不一致検索 指定した文字列を含まない行を検索します。(行単位で検索します。) 範囲選択されていれば選択範囲(の先頭行のみ)を、 範囲選択されていなければカーソル上の単語を入力文字列として使用します。 [変更履歴] 2010/01/06 新規 */ // メッセージボックスのタイトル (本マクロ名) var CAPTION = Editor.ExpandParameter("$M").replace( /^.*\\/, "" ); if( CAPTION == "" ) CAPTION = "不一致検索"; // [名前を指定してマクロ実行...] // 検索(検索ダイアログ)のオプション // bSEARCH_AutoClose は本マクロの動作とは無関係ですが、 // チェックOFFで使用されている方は false にしてください。 var bSEARCH_MatchCase = false; // 英大文字と小文字を区別する var bSEARCH_AutoClose = true; // 検索ダイアログを自動的に閉じる // 正規表現を使用するか (true=入力した文字列は、正規表現として扱う) var bUSE_REGEXP = false; Main(); function Main() { var oSC = new ActiveXObject("ScriptControl"); // InputBox var s, sOrg, c; var i; var nSearchOpt; // InputBox oSC.Language = "VBScript"; oSC.AddCode( 'Function InBox(prompt,title,default):InBox=InputBox(prompt,title, default):End Function' ); s = oSC.Run( "InBox", "指定した文字列を含まない行を検索します。\n" + "何も入力しない場合、改行のみの行以外が検索されます。\n\n\n" + "不一致検索する文字列" + ((bUSE_REGEXP) ? "(正規表現)" : "") + ":" , CAPTION, Editor.ExpandParameter("$C") ); if( typeof s == "undefined" ) return; // キャンセルされた // 不一致行検索の正規表現 if( s != "" ){ if( !bUSE_REGEXP ){ // メタ文字のエスケープ sOrg = s; s = ""; for(i=0; i < sOrg.length; i++){ c = sOrg.charAt( i ); if( "\\|()[]{}*+?.".indexOf( c ) != -1 ) s += "\\"; s += c; } } // 例:"abc" → "^(?!.*abc)[^\r\n]*(\r\n|\r|\n)?" s = "^(?!.*" + s + ")[^\\r\\n]*(\\r\\n|\\r|\\n)?"; }else{ // 改行のみ(空白も無し)の行 を不一致検索 s = "^[^\\r\\n]+(\\r\\n|\\r|\\n)?"; } nSearchOpt = 1<<2; // bit2:正規表現 nSearchOpt |= (!!bSEARCH_MatchCase)<<1; // bit1:英大文字と小文字を区別する nSearchOpt |= (!!bSEARCH_AutoClose)<<4; // bit4:検索ダイアログを自動的に閉じる Editor.SearchNext( s, nSearchOpt ); Editor.ReDraw(); // ステータスバーの行・桁の更新 }