質問: editor.filters; batch_list.AddReplace("[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\\.)+[a-zA-Z]{2,}$","メール略",eeFindReplaceCase | eeFindReplaceRegExp,0); document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo); ``` バックトラックについて教えていただきまして追記です。 回答ありがとうございます。半分解決しました。バックトラックについて理解致しました。 ただ、もうひとつわからないことは、EmEditorでは遅延する同じサンプル文と正規表現の書き方で秀丸でやると文章も正規表現もまったく同じなのに一瞬で変換されます。 またEmEditorでも同じくらいの文字数でもまったく遅延せずに一瞬で完了するテキストファイルもあります。この差は何でしょうか? どのテキストエディタを使っても遅延するということではなく、秀丸だと一瞬です。 この違いはどこからくるものでしょうか? よろしくお願いいたします。
回答: この画面図のダイアログのタイトルにも書かれているように、スクロール バー上のマーカーの更新に時間がかかっていると思われます。したがって、スクロール バー上のマーカーを無効にしていただければ速くなります。スクロール バー上のマーカーを無効にするには、設定のプロパティの [垂直スクロール バーにマーカーを表示] の下の [検索文字列] のチェックをクリアしてください。 さらに、正規表現が複雑すぎるために遅くなっています。 `[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*` という書き方は、複数のグループに任意の回数だけ一致しようとしていいますが、そのような組み合わせは非常に多く考えられるため、遅くなります。 さらに、`[a-zA-Z0-9_+-]+(` の後の `.` は、`\\.` と書く必要があります。 ``` batch_list = editor.filters; batch_list.AddReplace("[a-zA-Z0-9_+-]+(\\.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\\.)+[a-zA-Z]{2,}$","メール略",eeFindReplaceCase | eeFindReplaceRegExp,0); document.selection.BatchReplace(batch_list,eeReplaceAll,eeExFindRegexOnigmo); ``` とすると速くなります。正規表現はできるだけ簡素化して使用してください。