generated at
Scrapboxページ内の全リンクを取得する
モチベーション
書籍プロジェクトとメインプロジェクトを分けた
読書メモのリンクだけはメインプロジェクトでも機能させたい

要件
[] で囲まれた文字列をすべて取得
内部リンクだけを取得する
画像やGyazoやYoutubeや外部リンクは取得しない
http を含まないものにする
Scrapbox記法を除外
文末
.icon
文頭
[* ]
[$ a]
[\]
[- ]

これで大丈夫だ

ChatGPTにTampermonkey Scriptを書いてもらった
js
// ==UserScript== // @name Scrapbox Linked Texts Extractor with Context Menu // @namespace http://tampermonkey.net/ // @version 1.0 // @description Extract all linked texts from a Scrapbox page with brackets and copy to clipboard via context menu. // @author You // @match https://scrapbox.io/* // @grant GM_setClipboard // @grant GM_registerMenuCommand // ==/UserScript== (function() { 'use strict'; // Function to extract project name and page title from URL function extractProjectAndPage() { const urlParts = window.location.pathname.split('/'); return { projectName: urlParts[1], pageTitle: decodeURIComponent(urlParts[2]) }; } // Function to fetch page data from Scrapbox API async function fetchPageData(projectName, pageTitle) { const response = await fetch(`https://scrapbox.io/api/pages/${projectName}/${pageTitle}`); return await response.json(); } // Function to copy links to clipboard function copyLinksToClipboard(links) { const formattedLinks = links.map(link => `[${link}]`).join(', '); GM_setClipboard(formattedLinks, 'text'); alert('Links copied to clipboard:\n' + formattedLinks); } // Main function to process page data async function processPage() { const { projectName, pageTitle } = extractProjectAndPage(); const pageData = await fetchPageData(projectName, pageTitle); if (pageData && pageData.links) { copyLinksToClipboard(pageData.links); } else { alert('No links found on this page.'); } } // Register the script in the context menu GM_registerMenuCommand("Extract Links", processPage, 'e'); })();