最終更新日 2024-09-25

「hmV8」の例題 正規表現

概要

正規表現のエクササイズをみてみましょう。
.NET Frameworkの正規表現を利用することも可能ではありますが、
ES6には正規表現が組み込まれていますので、これを利用するのが良いでしょう。

上図のように選択して実行すると、数値が1つ増えるのがわかります。

エディタの文字とECMAScriptの正規表現、簡単な.NET

/*
 * This codes is licensed under CC0 1.0 Universal
 */

#JS = loaddll( hidemarudir + @"\hmV8.dll" ); 

#r = dllfuncw( #JS, "DoString", R"JS( 

// 置き換え対象とするパターン
// 前部(prev) + 数字(num) + [改行がありかも(post)] + 文末 
let ReplaceRegexp = /^(.*?\D)?(\d+)([\r\n]+)?$/;

// 置き換えの定義
let ReplaceAlgorithm = (all, prev, num, post) => {
    prev = prev || "";
    post = post || "";

    // 「数字部分」を「数値解釈上1足したもの」を返す
    return prev + (+num+1) + post;
}

try {

    // 選択対象の内容。(通常選択か行選択が対象。矩形選択や複数矩形選択は対象外。) 
    let SelectedText = hm.Edit.SelectedText; 
    if (!SelectedText) { throw "未選択"; }

    // テキスト置換の試行
    let ReplacedText = SelectedText.replace( ReplaceRegexp, ReplaceAlgorithm ); 
    if ( SelectedText == ReplacedText ) { throw "変更箇所なし"; }

    // 選択対象へと上書き 
    hm.Edit.SelectedText = ReplacedText;

} catch(e) {

    // 例外だと気付きを得るための効果音。
    clr.System.Media.SystemSounds.Beep.Play();

    // デバッグモニタに例外理由
    hm.debuginfo(e);
}

)JS" 
); 

freedll( #JS );