◀マクロトップへ
  • 614 JavaScriptの正規表現が良くわかりません…
    • 615 Re:JavaScriptの正規表現が良くわかりません…
      • 616 Re2:JavaScriptの正規表現が良くわかりません…
  • [614] JavaScriptの正規表現が良くわかりません… もも 2017年03月28日 15:16

    同じ指定でサクラの正規表現置換だと正しく対象になるのですが、
    同じ書き方をマクロ内のJavaScriptで指定しても動いてくれません。

    癖のような物を把握しようと何回か試行錯誤しましたが、なぜこのような
    挙動になるのかまるで理解が及ばず…

    私の指示の正しく無い所の添削をお願い申し上げます。

    状況としては、下のマクロを、//Test文字列 を別タブに複製して置換テスト
    しているのですが、実行中、"文字列"を"23"に書き換え "^.*?23.*?$"
    として 実行しても、対応行が削除されません。
    同じ設定をサクラエディタの置換画面に入力するとただしく該当範囲が
    設定されます。(//1234 と //2345 が該当)


    ”マクロ実行中・・・”の時間設定を調整したい
    http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=macro&tree=r570

    こちらでキャンセル待ち時間を0にする対応が書いてありましたが、
    (気の済むまで入力待ちになる)下のマクロの実行中だけ時間を0にして
    マクロ終了時に元の数字に戻す様な事を行いたいのですが可能でしょうか?


    // 正規表現を使い、文字列を含む行を削除
    function LineDelete(){
    Editor.SelectAll();
    var str = Editor.GetSelectedString(0); // 選択文字を変数へ
    do {
    var a ="^.*?文字列.*?$";
    a = inputBox("文字列が含まれる行を削除します。※繰り返し実行", a); // キャンセルで停止する
    if (a != "") {
    messageBox("内容は\r\n" + a +"\r\n" + "です。");
    str = str.replace( new RegExp(a,'g'),"");
    }
    } while( a != "" )
    messageBox("キャンセルされたので終了します");
    Editor.InsText( str );
    }
    LineDelete();

    //Test文字列
    //1234
    //2345
    //3456
    //4567

    • [615] Re:JavaScriptの正規表現が良くわかりません… もか 2017年03月28日 23:11

      ^と$は、普通だと「全データの先頭と末尾」を指します。
      RegExpのところを'mg'にして、マルチラインモードにする必要があると思います。

      >マクロの実行中だけ時間を0
      そういうことは現在できません。
      • [616] Re2:JavaScriptの正規表現が良くわかりません… もも 2017年03月29日 12:18

        ▼ もかさん
        回答ありがとうございます。

        > ^と$は、普通だと「全データの先頭と末尾」を指します。
        > RegExpのところを'mg'にして、マルチラインモードにする必要があると思います。

        mの意味を逆に解釈してました…(mが付くと各行の行頭・行末を認識しない)

        > >マクロの実行中だけ時間を0
        > そういうことは現在できません。

        うう、残念です。