Scrapboxの別ページリンク記法にマッチする正規表現
linktoのみ検出したい
o
x
[りんく]
太字
太字
斜体
https://gyazo.com/505861e8a5c21ae87eb972c4affd8841
sta.icon
うーん……
一つの正規表現だけで頑張るのは無理がありそう
n個の正規表現使った方がいいか
xの方を除外する正規表現を複数用意して、判定したいline(のコピー)を書き換える
で、最後に、そのコピーに対して、シンプルに[xxx]を探す正規表現を使う
これ使う?
https://gyazo.com/de8a245a5c67b82f945649fa508e37a8
が、問題が二点
1 そもそも他から使えるようI/F整えてない
ここに書くのも違うし
2 これは to markdown 用の正規表現であって、純粋にscb記法のリンクを取りたい場合とは文脈が違う
たとえばRE_LINK_ANOTHER_PAGEは、(既にmarkdown記法のリンクに変換された後に生成される)[](の(の存在を前提とした表現になっている
もうこれ愚直にparseした方が早くね?
いや、状態遷移ゲーはもうこりごり。。。
実装し直すかー
粗いけどいったんdone
いやハッシュタグがまだ
そして難しい
code:py
RE_HASHTAG = re.compile(r'( |^|\n|\r)#(.+?)( |$|\n|\r)')
これだと#hash #hashみたいにスペース区切りで連続してるケースをキャプチャできん
どうすれば
\b?
たぶんこれだ
あ、でも日本語も非英数文字なのでダメかな
code:py
RE_HASHTAG = re.compile(r'\b#(.+?)\b')
だめ
code:py
RE_HASHTAG = re.compile(r'( |^|\n|\r|\b)#(.+?)( |$|\n|\r)')
これだとあああ#ここは検出されないも検出されてしまう
ドキュメント見ても無さそうだが
先読みアサーション?
(?=...)
肯定先読みアサーション。 ... で表わす正規表現が現在位置でマッチすれば成功し、それ以外の場合失敗します。しかし、表現が試行された場合でもエンジンは先に進みません
エンジンを先に進ませないんだよな、つまりは
code:整理
今起きてるの
^^^^^^^^
^
エンジンはここからスタートしてしまう
しかし #(.+?) みたいな表現にすると aaa#aaa こういう文字列もヒットしてしまう んー、ちょっとわからん
ググる
ダメ。aaa#aaaもヒットしちまう
他にヒットした記事も同じ感じでうーんsta.icon
仕方ない、プリプロセスで対処する
code:プリプロセス対象の考察
^^ ^^
#を #などに変えてしまう、が思いついたんだが
原意削がれないよな?
対応してみた
実装がエレガントじゃなくて不吉な臭いするけど。。。sta.icon まだ
codeの中身を弾く