リンクを外すPopupMenu
ブラケティングを外すPopupMenu
code:script.js
// リンクを外す
scrapbox.PopupMenu.addButton({
title: 'unlink',
onClick: text => {
const result = text.split(/\n/).map(line => {
// URL リンク名とリンク名 URLのブラケットを外す
line = line.replace(/\[(https?:\/\/^\s\]+)(\s^\]+)?\]/g, '$1$2');
line = line.replace(/\[(^\]+)\s(https?:\/\/^\s\]+)\]/g, '$1 $2');
// [(*太字 -打ち消し線 /イタリック体 _アンダーライン $数式 )が含まれず (.icon)で終わらない]のブラケットを外す
line = line.replace(/\[([^\*\-\/_\$\\]*?)(?<!\.icon)\]/g, '$1');
return line;
}).join('\n');
// テロメアが無駄に更新されるのを防ぐ
if(text == result) return;
return result;
}
});
とり漏らしていないかテストする
URLのリンクも外す
イタリック体の記法とは別で判定する
http://example.com
http://example.com サイト名
サイト名 http://example.com
[サイト名 URL]のURLの前の空白\sを利用して通常のリンクと区別している
ブラケットが取れなければよい
打ち消し線
アンダーライン
太字
イタリック体
$ \TeX
あんも.icon
icon
/customize/リンクを外すUserScript
/takker/unlink Popup menu
半角の!で始まるリンク: !から始まるリンクがはずせない?
いや正規表現でもとから無視するようにしているっぽいあんも.icon
正規表現を読んでみる
/\[([^\[!"#%&'()\*\+,\-\.\/\{\|\}<>_~][^\[\]]*)\]/g
/正規表現/g
JavaScriptの正規表現リテラルはスラッシュ/で囲まれる
gフラグで全てのマッチを検出する
フラグなしの場合は最初のマッチのみ検出する
\[...\]
[と]で囲まれたテキストを検出する
\はエスケープ文字
([^\[!"#%&'()\*\+,\-\.\/\{\|\}<>_~][^\[\]]*)
[...]内のテキストを抽出する
[^...]とすれば...に含まれない任意の文字を表現できる
2つのキャラクターセットで構成されている
[^!"#%&'()\*\+,\-\.\/\{\|\}<>_~]
リンクの最初の文字が!"#%&'()*+,-./{|}<>_~のいずれでもないことを確認する
[^\[\]]*
リンクの残りの部分が[や]を含まないことを確認する
*: 0回以上の繰り返し
拡張装飾記法は極力使わないようにしているので、リストから削る
\[^!"#%&'()\*\+,\-\.\/\{\|\}<>_~]から削る
[^\*\-\/_\$]
数式記法が含まれていなかったあんも.icon
これと逆の操作で、$から始まる部分はTeX記法にするのが考えられそうあんも.icon
数式にするPopupMenuを作ったあんも.icon