正規表現を展開してリンクにしてくれるUserScript
導入方法
使い方
「 [正規表現記法]
」という形式(「`」も含む)でリンクを書き、Pop upの「正規表現を展開」をクリック
サンプル
一緒に使うと良いCSS
これが無いと展開したものが邪魔すぎると思う
style.css.popup-menu .button-container .button:empty {
display: none;
}
これを置くとコードブロック以外のところで文字を選択しても謎の空白ができなくなる
未来の自分の検索ワードに引っかかって欲しい時に便利そう
Helpfeel記法の検索を利用したい
Helpfeel記法を勝手に展開してリンクにしてくれるUserScriptがあれば良い?
? (アメリカ|米国)の大学出願に必要な(試験|テスト)は?
と書くと、その下に
[( [アメリカの大学出願に必要な試験は?] [アメリカの大学出願に必要なテストは?] [米国の大学出願に必要な試験は?] [米国の大学出願に必要なテストは?] ]
と自動で展開される、みたいな
展開されたリンクが邪魔くさいのはUserCSSでなんとかすれば良さそう
実装自体はそこまで難しくない
script.jsimport Generator from "https://esm.sh/re_expand@0.2.0";
const expand = (pattern) => {
const generator = new Generator(pattern);
try {
// " "はワイルドカード
return [
...new Set(
generator.filter(" ").flatMap((pairs) =>
pairs.map(([expanded]) => expanded)
),
),
];
} catch (e) {
// TypeErrorがでたpatternは無視する
if (e instanceof TypeError) return [];
throw e;
}
};
const condition = /^\s*`\[([^\n]+)\]`/
const processLine = (line) => {
const match = line.match(condition)
if (match === null) {
return line
} else {
return `\`[${match[1]}]\` ${expand(match[1].replace(/[\[\]]/g, ""))
.flatMap((description) => description !== "" ? [`[, [(${description})]]`] : [])
.join(" ")}`
}
}
scrapbox.PopupMenu.addButton({
title: (text) => text.split("\n").some(
(line) => condition.test(line.trim())
) ? "正規表現を展開" : "",
onClick: (text) =>
text.split("\n").map(processLine).join("\n"),
});
あるんです!
(知らずに再実装するところだった)
実装結構メンドクサイですが、うまく作れます?
Scrapboxだとimport出来ない?
あ、bundleしないと使えないって言うの忘れてた
compileボタン設置しました
なるほど
Helpfeel記法内だとPopUpが表示されないみたい?
ほんとだ
Helpfeel記法の前の行まで選択すればでてくる
さんの実装を一部改変しました🙏(前のはHistoryにあります)
? Helpfeel記法を(展開|Expand)する(UserScript|拡張機能)
こんな感じのフォーマットにしました
理由
行の後ろにリンクを置きたかった
純正Helpfeel記法だと後ろに別のものを置けない
Text<-このCSSでリンクの存在を示しつつコンパクトに詰め込ました
本物のHelpfeel記法が使えるなら本物のHelpfeelで検索すればいい
?
を正規表現と認識してしまう
一つでいいのに4つ出てしまう
このページに辿り着きたい時は良いが、それ以外の時に邪魔
これがUserCSSで解決できれば本当にHelpfeelになる?
小さくしてみた✅
補完で色々なページにリンクが飛ぶ
Wikiとして成り立たなくなる
なるほど
もはやHelpfeel記法に似せる必要も無い気がしてきた
質問形式以外でも、普通のリンクのバリエーションを増やしたい時に使えるので
[(正規表現|Regex)記法]
というフォーマットを展開する形でよさそう
変えてみた✅
リンクが展開されているという事が分かりやすくて良さそう
検索結果で展開された正規表現のみフィルタして小さくしたい
ゼロ幅スペースを展開時に埋め込めば、
a[href*="%E2%80%8B"]
でCSSにてフィルタできる?
やってみた✅
PopUpを使わない形の実装も考えてみたい
書いている側から常時勝手に展開される様なイメージ
現在のカーソル位置と異なる場所に挿入は難しい?
書いて改行したら展開されるとかでも良いか