文字列リテラルにマッチするJavaScript正規表現
2022-01-18 02:39:57
この問題に初めて遭遇したのは2年ほど前にコードハイライトを書いた時で、それ以来3世代に渡って解決策が出されています、ガーン。だんだん良くなってきたと思います。
第一世代
プレ
{{コード
第2世代。
プレ
{コード
第三世代 :
// At that time I was not very proficient in regularity, and I did not have (? :...) I wrote this rule by looking for the closing quotes. The idea is confusing, and there are mistakes.
// For example, a literal like "abc\\\\"", would match "abc\\\\", when the correct result would be "abc\\\\\"".
var re = /('('|. *? ([^\\]'|\\\\'))|"("|. *? ([^\\]"|\\\\")))/g;
ここで、正規表現で非常によく使われるトリックを「先取り」と呼ぶことにしよう。/a|のような正規表現では、先取りをする。/code /pre /div のような正規表現では、より先行する文字が先にマッチするので、いくつかの文字を「先取り」することで多くのトラブルを回避することができます。上の例では、/cheek[˶‾᷄ -̫ ‾᷅˵]/は当然"˶‾᷄"のようなエスケープ文字を優先するので、エスケープ文字の""がマッチに影響する心配がありません。これは局所的な "preemption "ですが、コメント中の文字列や文字列中のコメントなど、より大きな範囲では、関連するマッチが同じルールに書かれている限り、最初に出会ったマッチが優先される必要があります。例えば /(コメント正規)|(文字列正規)/g のように、まずこのように内容をマッチさせてから、さらに処理を行うことができる。
ほとんどの人にはほとんど役に立たないかもしれませんが、もしそうだとしたら?よろしくお願いします〜。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン