「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 );