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