ご利用前に必ずお読みください
> 100の人 さん、Kuro さん、AC さん 手石さん、貴重なお話をありがとうございます。 > 脇から拝見していて、とても参考になりました。 > > このままだともったいない流れなので、最後にひとつ。 > お礼のご挨拶かわりに、めまいを抑えて考えたことを書かせてください。 > > 100の人 さん > ------------ > > JavaScriptの正規表現リテラルに対応することはできないでしょうか。 > > > 編集モードの設定→構文→引用符に囲まれた文字列 において > > 任意の約物を設定できるようにし、 > > 正規表現リテラルに対応するってことは出来ないでしょうか。 > > > 引用符に囲まれた文字列の設定で現在「1重引用符」「2重引用符」が選択できますが、 > > これに「スラッシュ」「バッククォート」等を追加することも、やっぱり難しいのでしょうか…… > > この「JavaScriptの」という点が大切です。編集モードは、言語ごとに対応が異なる > ので、どんな場面でも通用する強調文字列を求めるはたいへんなこと。 > > Mery はプログラム開発専用のツールではなく、いろいろな文章や文字データを加工 > する幅広い用途の道具、ということもあって、IDE(統合開発環境)のエディタや > lint(構文チェッカー)と同等の機能を求めるものではないはずです。 > > どうかそれを念頭において、以下をご覧ください。 > > Mery 1.1.2.2840 の JavaScript 編集モードでの表示は、文字リテラルと同じく > 正規表現リテラルは、赤い字に表示されます。 > / と / に挟まれた間を正規表現リテラルと判断しますが、その中に /* があれば、 > 複数行コメントの開始と見なして、以降をコメントの緑色で表示します。 > > でも正規表現リテラルの前にカッコの ( があるとき、( ) に囲まれてた式の中にある > ときは、正規表現リテラルの中に /* があっても複数行コメントの開始と見なしません。 > > この動作は Mery 2 にはありません。Kuro さんがおっしゃるように、Mery 1 と同様に > 複数行コメントの判断を先にするので、正規表現リテラルが括弧に囲まれていても /* > 以降は */ が出現するまで、複数行コメントと見なされます。 > > これについては、Mery 2 の編集モードでは操作できません。 > > しかし、これは、コードを編集するのがご自身であれば、\/* の \/ を \x{002f} など > のコードポイントや内部コードなどで書くか、その行に行コメントで、// */ のように > ダミー文字列を書くことで実用上の支障は減らせるのではないかと思います。 > > 開始と終了が同じ文字となる引用符の組のような対応関係を判断するのは、おっしゃる > ほど簡単ではありません。エスケープの条件がそれぞれに異なるからです。引用符ですら > 2つ重ねるとエスケープとする言語があります。 > > 構文の知識がなければ、その言語の文脈を確実には把握できません。 > エディタ作者がそれをすべて用意するのではなく、その言語を熟知しているユーザが > その知識で編集モード(構文ファイル)を作れるようにして下さったのですから、それ > をできるだけ活用して、自分で使い易い道具に仕立ててゆけばいいですね。 > > JavaScript の正規表現でも、100の人 さんのご指摘通り、文字集合 [ ] の中では特別な > 扱いをしなければなりません。引用符の代わりに / スラッシュを使うとしても、もっと > 工夫が要るように思います。 > > 強調文字列は、改行を超えての表示ができませんし、複数行コメントや引用符の指定では > 正規表現が使えません。 > > また、Rubyの正規表現リテラルは、簡単には表現できないほど多様な記述ができます。 > 開始・終了文字の括弧や任意の文字が使えること、内部に式展開があること、など難問が > 目白押しです。 > > さて、ずいぶん時間がかかってしまいましたが、Mery 1.1.2.2840 と見比べながら、なんとか > 似たところまではたどり着きました。 > でも、例にあげているような日本語の文章の中ではなくて、あくまでも JavaScript の > 文脈の中で見てください。構文の判断材料がないとうまく動作できません。 > > ○ JavaScript の正規表現リテラル 強調文字列 > 開始と終了は / の1字。 > 開始側の \ 1字の前置 を除外。 > // と /* は除外。 > 終了側 / で JavaScript構文を考慮。 任意の空白に続く、 ) . , ; = } 改行 または // を後置。 > 開始側 / で JavaScript構文を考慮。 = ( 空白 改行 を前置。 > 内側 [ ] の中は文字集合。内部では [ ] のエスケープ と 改行 を除外。 > 終了側に後置のオプション文字は選択しない。 > > (?<!^\\|[^\\]\\|/)(?<=[\(=\s]|^)(?:(?<a>\/)(?![*/])(?:(?:(?!\k<a>)[^\\\n])|(?:\\[^\n])|(?<!^\\|[^\\]\\)(?:(?:[\[])(?:(?:(?!\])[^\\\n])|(?:\\[^\n]))*?\]))*?\k<a>)(?=[gimy]{,4}\x{0020}*(?:[\),.;=\}\n]|\/\/)) > > > AC さん > ------- > > この先読み部分は自分のスタイルに合わせてチューニングが可能な部分ですし、リテラルを開始する > > スラッシュの直後にスペースは絶対に書かない(現れない)、などの自分ルールを加えることで誤認識をさらに > > 減らすこともできますが、単体の正規表現ではそれくらいしかできないということでもあります。 > > まったく同感です。パーソナルな用途に柔軟に対応してくれることだけで、十分うれしいので、 > 状況に応じて、できるところまで手伝ってくれる、という Mery の方向性がいいですね。 > > > *改行文字を含むことができない。(※Mery+鬼車ならできるかも) > > *区切り文字に改行文字を使用できない。(※Mery+鬼車なら対応できるかも) > > 検索(選択)ではできますが、強調の表示は Mery が許してくれませんのでできません。 > > > *かっこを使ったリテラルで区切り文字のエスケープに対応していない。(エスケープするくらいなら違う > > 種類のかっこを使ってよ) > > 作ってみました。長~い正規表現でもよければ、お試しください。Ruby をよく知らないで作っている > ので、怪しい挙動です。 > > ○ Ruby の %r 正規表現リテラル 強調文字列 > %r( ) > 開始 %r( と終了は ) の文字。 > 開始側の \ 1字の前置 を除外。 > 終了側 ) で Ruby構文を考慮。 任意の空白に続く、 ) . , ; = } 改行 または // を後置。 > 開始側 %r( で Buby構文を考慮。 = ( 空白 改行 を前置。 > 内側 [ ] の中は文字集合。内部では [ ] のエスケープ と 改行 を除外。 > 終了側に後置のオプション文字は選択しない。 > > (?<!^\\|[^\\]\\)(?<=[=\(=\s]|^)(?:(?<a>%r(?<b>[\(]))(?:(?:(?!\k<a>)[^\\\n])|(?:\\[^\n])|(?<!^\\|[^\\]\\)(?:(?:[\[])(?:(?:(?!\])[^\\\n])|(?:\\[^\n]))*?\]))*?\))(?=[eimnosux]{,5}\x{0020}*(?:[\),.;=\}\n]|\/\/)) > > ○ Ruby の %r 正規表現リテラル 検索用文字列 ※長すぎて (260字超) 強調文字列には使えません > %r( ) > 上記のほかに… > 式展開 #{ } の中は任意式、内部では { } の入れ子、組になっていない括弧を許容 > 外側の %r( ) と包含する #{ } で二重の再帰。 > > (?<!^\\|[^\\]\\)(?<=[=\(=\s]|^)(?<!^\\|[^\\]\\)(?<a>%r)(?<c>(?:(?<b>\()(?:(?:(?:[^\(\)\\\[\]#])|(?:\\[\s\S])|(?:(?<!^\\|[^\\]\\)(?:(?:[\[])(?:(?:(?!\])[^\\\n])|(?:\\[^\n]))*?\]))|(?:(?<!^\\|[^\\]\\)(?:#)(?<d>(?:\{(?:(?:(?:[^\{\}\\])|(?:\\[\s\S]))*\g<d>?(?:(?:[^\{\}\\])|(?:\\[\s\S]))*)+(?:\})?)))|[#\[\]])*\g<c>?(?:(?:[^\(\)\\\[\]])|(?:\\[\s\S])(?:(?<!^\\|[^\\]\\)(?:(?:[\[])(?:(?:(?!\])[^\\\n])|(?:\\[^\n]))*?\]))|[\[\]])*)+(?:\))?))(?=[eimnosux]{,8}\x{0020}*(?:[\),.;=\}\n]|\/\/)) > > いつもながら長文ですみません。 もいすん === inuuik _o_
マークダウンを有効にする
テキストエディター「Mery」ベータ版 v3.8.4 を公開
テキストエディター「Mery」の配色テーマ集
知っておくと便利なテキストエディター「Mery」の 10 個の小技
テキストエディター「Mery」ベータ版 Ver 2.6.9 を公開、自動保存機能、バックアップ機能を搭載
ヨーグルトメーカーで作った R-1 ヨーグルトで強さを引き出してみた
トモダチコレクション わくわく生活 -Switch
トモダチコレクション わくわく生活|オンラインコード版
ニンテンドープリペイド番号 9000円|オンラインコード版
ニンテンドープリペイド番号 5000円|オンラインコード版
ニンテンドープリペイド番号 2000円|オンラインコード版
異世界のんびり農家 20.5
ノーゲーム・ノーライフ 13 ゲーマー兄妹たちは『魔王』を討つ(すくう)よ…
目覚めたら最強装備と宇宙船持ちだったので、一戸建て目指して傭兵として自…
陰の実力者になりたくて! 07
騎士爵家 三男の本懐3