generated at
リンクを外す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のリンクも外す
イタリック体の記法とは別で判定する
http://example.com サイト名
サイト名 http://example.com
[サイト名 URL] のURLの前の空白 \s を利用して通常のリンクと区別している
ブラケットが取れなければよい
打ち消し線
アンダーライン
太字
イタリック体
\TeX
あんも


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