リンクを外すPopupMenu
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のリンクも外す
イタリック体の記法とは別で判定する
[サイト名 URL]
のURLの前の空白 \s
を利用して通常のリンクと区別している
ブラケットが取れなければよい
打ち消し線
アンダーライン
太字
イタリック体
\TeX
いや
正規表現でもとから無視するようにしているっぽい

正規表現を読んでみる
/\[([^\[!"#%&'()\*\+,\-\.\/\{\|\}<>_~][^\[\]]*)\]/g
/正規表現/g
JavaScriptの正規表現リテラルはスラッシュ /
で囲まれる
g
フラグで全てのマッチを検出する
フラグなしの場合は最初のマッチのみ検出する
\[...\]
[
と ]
で囲まれたテキストを検出する
\
はエスケープ文字
([^\[!"#%&'()\*\+,\-\.\/\{\|\}<>_~][^\[\]]*)
[...]
内のテキストを抽出する
[^...]
とすれば ...
に含まれない任意の文字を表現できる
2つのキャラクターセットで構成されている
[^!"#%&'()\*\+,\-\.\/\{\|\}<>_~]
リンクの最初の文字が !"#%&'()*+,-./{|}<>_~
のいずれでもないことを確認する
[^\[\]]*
リンクの残りの部分が [
や ]
を含まないことを確認する
*
: 0回以上の繰り返し
拡張装飾記法は極力使わないようにしているので、リストから削る
\[^!"#%&'()\*\+,\-\.\/\{\|\}<>_~]
から削る
[^\*\-\/_\$]
これと逆の操作で、
$
から始まる部分はTeX記法にするのが考えられそう
