不一致検索(一致しない行の検索)
- ページ: Macro/投稿
- 作者: jj?
- カテゴリー: js
- 投稿日: 2010-01-08 (金) 03:26:10
メッセージ
指定した文字列を含まない行を検索します。(行単位で検索します。)
何のことはありません、正規表現 "^(?!.*不一致文字列)[^\r\n]*(\r\n|\r|\n)?"
をすぐ忘れてしまうのでマクロ化しただけです。
当初はemacsの delete-non-matching-lines (不一致行を削除)のようなのが
欲しかったのですが、まず検索して結果を確認し、それから置換ダイアログで
ドロップダウンリストから選べば済むので、検索だけに留めました。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| |
var CAPTION = Editor.ExpandParameter("$M").replace( /^.*\\/, "" );
if( CAPTION == "" ) CAPTION = "不一致検索";
var bSEARCH_MatchCase = false; var bSEARCH_AutoClose = true;
var bUSE_REGEXP = false;
Main();
function Main()
{
var oSC = new ActiveXObject("ScriptControl"); var s, sOrg, c;
var i;
var nSearchOpt;
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(); // ステータスバーの行・桁の更新
}
|