generated at
数式にするPopupMenu
選択した部分の特定の記法を数式記法にするPopupMenu
$ で始まって、 $ で終わる部分を数式記法にする
$x$ のようなテキストを [$ x ] のように置換する
文章中に出てくる数式f(x)や変数xにちまちま適用するのはめんどくさかったあんも
すでに数式記法になっている部分を選択すると期待する動作にならない
ので、うまく避けて選択する

script.js
scrapbox.PopupMenu.addButton({ title: "$TeX$", onClick: text => { const result = text.split(/\n/) .map(line => line.replace(/\$(.+?)(\$)/g, '[\$ $1 ]')) .join('\n'); // テロメアが無駄に更新されるのを防ぐ if(text == result) return; return result; } });
テスト
$\frac{355}{113}$
文章中の数式$f(x)$と変数$x$
末尾に$がない場合
複数行の場合ははたらかない
$a
b$
$\begin{array}{|c|c|c|}
\hline
P & Q & P \veebar Q \\
\hline
0 & 0 & 0 \\
0 & 1 & 1 \\
1 & 0 & 1 \\
1 & 1 & 0 \\
\hline
\end{array}$

正規表現: /\$(.+?)(\$|$)/g
/正規表現/g
JavaScriptの正規表現リテラルはスラッシュ / で囲まれる
g フラグで全てのマッチを検出する
フラグなしの場合は最初のマッチのみ検出する
\$
\ でエスケープして $ を表現する
(.+?)
1文字以上の任意の文字列を検索する
. : 任意の文字
+ : 1回以上の繰り返し
? : 直前の要素の最小マッチ
貪欲ではないマッチ
(\$|$)
$ または文字列の終端 $ を検索する
改行で分割しているので、終端が改行になっている
| : 「または」






js
scrapbox.PopupMenu.addButton({ title: (text) => text.includes("\n") ? "" : "[$ TeX]", onClick: text =>{ text=text.split(/\n/).map(line => line.replace(/(.+)/g,'\[\$ $1 \]')).join('\n')   return text; } })
数式記法の閉じカッコをいい感じに動作させるために、最後のブラケットの前に空白が入るようにした
TeX記法を目的にしたテキストはその他の目的に使うことはないので、違うバージョンを考える
$x のようなテキストが [$ x ] のように置換されるような動作
リンクを外すPopupMenuを参考にしてつくる
作ったあんも
が、すでにあった
>Scrapboxで、$...$ でくくられた部分をすべて [$ ...] に置換するためのUserScriptを作りました。普通に書いたものをScrapboxに貼り付けて範囲指定してLaTeXというボタンをクリックすると変換。
正規表現が勉強できたからいいか