私は BBCode スタイルのエディターを作成中です。既成の努力を使用するのではなく、これを行うには優れた理由があります。ほとんどが正常に動作していますが、1 つの条件についてテストする必要があります。次のマークアップを検討してください
[para=2]
abc
[/para]
[para=0]
123
[/pa|ra]
すぐにわかるように、上のパイプ文字はタイプミスではありません。プレースホルダーとして使用しています。
ここで、次のユーザー アクションが、私のバージョンのボールド マークダウン タグ [bold][/bold] を挿入することだと想像してください。私のコードは、ユーザーが既存のテキストの一部を既に選択しているかどうかに関係なく、これを処理できます。たとえば、abc.
ただし、次の状況を見てください。
- abc を選択 - 変換により [bold]abc[/bold] が生成されます
- abc の c の後のキャレット - 変換により abc[bold][/bold] が生成されます
- 最後の [/para] のパイプ、|、文字のキャレット
現在、私のコードは [pa|[bold][/bold]ra] を喜んで義務付けて返します。
明らかに、私がする必要があるのは、ユーザーの選択、または現在のキャレット位置がマークダウン タグの 1 つに完全に収まらないことを確認することです (選択がマークダウン タグと重なっていないことを確認するコードが既にあります。
場所がマークダウンタグ内にあることを検出するには、選択の開始位置と終了位置を「見回す」という行に沿って何かをする必要があります。
おそらく、ルックアラウンドという言葉が示唆するように、解決策は正規表現にあります。ただし、私の正規表現スキルはかなり基本的なものなので、助けていただければ幸いです。