「Wikipediaマークアップ修正」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
概要の説明を修正
MSY-07 (トーク | 投稿記録)
テンプレート名の変更
 
(同じ利用者による、間の47版が非表示)
1行目: 1行目:
Wikipediaの記事を標準的なマークアップおよび表記方法で修正します。
Wikipediaの記事を標準的なマークアップや表記方法で修正します。


構文ファイルの[[Wikitext]]と併用すると便利です。
構文ファイルの[[Wikitext]]と併用すると便利です。
== 注意事項 ==
* このマクロは[https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88 ウィキペディア日本語版]の記事での動作を想定しています。他言語版や記事以外のページは動作対象外です。
* ソースコードをコピーする前にエディターの編集モードが「ソースの編集」になっていることを確認してください。もし、編集モードが「ビジュアル編集」になっている場合は、「ソースの編集」に切り替えてからソースコードをコピーしてください。
* 記事のソースコードの書き方によっては想定外の修正をしてしまう可能性がありますので、マクロを実行した後は必ずWikipedia上のプレビュー画面と差分画面の両方で問題がないことを確認してから投稿してください。


== 使用方法 ==
== 使用方法 ==
# 表記を修正したい記事をコピーしてMeryにペーストします。
# 修正したい記事の上部にある「編集」または「ソースを編集」ボタンをクリックして、ソースエディター内のソースコードを全選択してコピーした後、Meryにペーストします。
# マクロを実行します。
# 修正したいソースコードのタブがアクティブになっている状態でマクロを実行します。
 
# 修正したソースコードを全選択してコピーした後、ソースエディター内のソースコードを全選択した状態でペーストして上書きします。
== 注意事項 ==
# 「プレビューを表示」または「差分を表示」ボタンをクリックして、プレビュー画面または差分画面で修正箇所を確認します。問題がなければ、「編集内容の要約」に編集した内容の要約を記入した後、「変更を公開」ボタンをクリックして修正した記事を投稿します。
マクロを実行後、必ずWikipedia上のプレビュー画面と差分画面で問題がないか確認してから投稿してください。


== 出典 ==
== 出典 ==
16行目: 20行目:


== ソースコード ==
== ソースコード ==
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript" copy>
// -----------------------------------------------------------------------------
#title = "Wikipediaマークアップ修正"
// Wikipedia表記修正
#tooltip = "Wikipediaのマークアップや表記を修正します。"
//
 
// Copyright (c) MSY-07. All Rights Reserved.
// --------------------------------------------------
// www:    https://www.haijin-boys.com/
// 置換処理の定義
//
// --------------------------------------------------
// 出典1: https://ja.wikipedia.org/wiki/Help:早見表
// [0] メニュー表示名
// 出典2: https://ja.wikipedia.org/wiki/Help:ページの編集
// [1] 実行する置換関数
// 出典3: https://ja.wikipedia.org/wiki/Wikipedia:表記ガイド
// --------------------------------------------------
// -----------------------------------------------------------------------------
var f = [
["全角空白", fullwidth_space],
["全角記号", fullwidth_symbols],
["全角英数", fullwidth_alphanumeric_characters],
["半角カナ", halfwidth_kana],
["約物", punctuation_marks],
["ローマ数字", roman_numerals],
["丸数字", circled_numbers],
["空白", space],
["改行・空行", line_breaks_and_blank_lines],
["箇条書き", bullet_points],
["1行改行", single_line_break],
["表・Infobox", tables_and_infoboxes],
["タグ", tag],
["ウィキリンク", wikilinks],
["リダイレクト", redirect],
["マジックリンク", magic_links],
["テンプレート", templates],
["注釈", notes],
["出典", references],
["脚注", footnotes]
];
 
// ポップアップメニューを作成
var menu = CreatePopupMenu();
 
// 「すべての置換処理を順番に実行」メニュー
menu.Add("すべて実行", 1, 0);
menu.Add("", 0, meMenuSeparator);
 
// 個別の置換処理メニュー
for (var i = 0; i < f.length; i++) {
menu.Add(f[i][0], i + 2, 0);
}
 
// ポップアップメニューを表示
var n = menu.Track(mePosMouse);
 
// メニューが選択されなかった場合は終了
if (n == 0) {
Quit();
}
 
var sel = document.selection;
 
// 未選択の場合は全文を対象にする
if (sel.Text == "") {
sel.SelectAll();
}
 
// 対象テキストを取得
var s = sel.Text;
 
// すべての置換処理を実行
if (n == 1) {
for (var i = 0; i < f.length; i++) {
s = f[i][1](s);
}
}
// 選択された置換処理のみ実行
else {
s = f[n - 2][1](s);
}
 
// 置換結果を反映
sel.Text = s;
 
// -------------------------
// 置換処理用関数
// -------------------------
 
// 全角空白
function fullwidth_space(s) {
return s
.replace(/ /g, ' ');
}
 
// 全角記号
function fullwidth_symbols(s) {
return s
.replace(/$/g, '$')
.replace(/%/g, '%')
.replace(/&/g, '&')
.replace(/*/g, '*')
.replace(/+/g, '+')
.replace(/,/g, ',')
.replace(/-/g, '-')
.replace(/./g, '.')
.replace(///g, '/')
.replace(/;/g, ';')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/@/g, '@')
.replace(/¥/g, '\\')
.replace(/^/g, '^')
.replace(/_/g, '_')
.replace(/`/g, '`');
}
 
// 全角英数
function fullwidth_alphanumeric_characters(s) {
return s
.replace(/0/g, '0')
.replace(/1/g, '1')
.replace(/2/g, '2')
.replace(/3/g, '3')
.replace(/4/g, '4')
.replace(/5/g, '5')
.replace(/6/g, '6')
.replace(/7/g, '7')
.replace(/8/g, '8')
.replace(/9/g, '9')
.replace(/A/g, 'A')
.replace(/B/g, 'B')
.replace(/C/g, 'C')
.replace(/D/g, 'D')
.replace(/E/g, 'E')
.replace(/F/g, 'F')
.replace(/G/g, 'G')
.replace(/H/g, 'H')
.replace(/I/g, 'I')
.replace(/J/g, 'J')
.replace(/K/g, 'K')
.replace(/L/g, 'L')
.replace(/M/g, 'M')
.replace(/N/g, 'N')
.replace(/O/g, 'O')
.replace(/P/g, 'P')
.replace(/Q/g, 'Q')
.replace(/R/g, 'R')
.replace(/S/g, 'S')
.replace(/T/g, 'T')
.replace(/U/g, 'U')
.replace(/V/g, 'V')
.replace(/W/g, 'W')
.replace(/X/g, 'X')
.replace(/Y/g, 'Y')
.replace(/Z/g, 'Z')
.replace(/a/g, 'a')
.replace(/b/g, 'b')
.replace(/c/g, 'c')
.replace(/d/g, 'd')
.replace(/e/g, 'e')
.replace(/f/g, 'f')
.replace(/g/g, 'g')
.replace(/h/g, 'h')
.replace(/i/g, 'i')
.replace(/j/g, 'j')
.replace(/k/g, 'k')
.replace(/l/g, 'l')
.replace(/m/g, 'm')
.replace(/n/g, 'n')
.replace(/o/g, 'o')
.replace(/p/g, 'p')
.replace(/q/g, 'q')
.replace(/r/g, 'r')
.replace(/s/g, 's')
.replace(/t/g, 't')
.replace(/u/g, 'u')
.replace(/v/g, 'v')
.replace(/w/g, 'w')
.replace(/x/g, 'x')
.replace(/y/g, 'y')
.replace(/z/g, 'z');
}
 
// 半角カナ
function halfwidth_kana(s) {
return s
.replace(/。/g, '。')
.replace(/「/g, '「')
.replace(/」/g, '」')
.replace(/、/g, '、')
.replace(/・/g, '・')
.replace(/ガ/g, 'ガ')
.replace(/ギ/g, 'ギ')
.replace(/グ/g, 'グ')
.replace(/ゲ/g, 'ゲ')
.replace(/ゴ/g, 'ゴ')
.replace(/ザ/g, 'ザ')
.replace(/ジ/g, 'ジ')
.replace(/ズ/g, 'ズ')
.replace(/ゼ/g, 'ゼ')
.replace(/ゾ/g, 'ゾ')
.replace(/ダ/g, 'ダ')
.replace(/ヂ/g, 'ヂ')
.replace(/ヅ/g, 'ヅ')
.replace(/デ/g, 'デ')
.replace(/ド/g, 'ド')
.replace(/バ/g, 'バ')
.replace(/ビ/g, 'ビ')
.replace(/ブ/g, 'ブ')
.replace(/ベ/g, 'ベ')
.replace(/ボ/g, 'ボ')
.replace(/パ/g, 'パ')
.replace(/ピ/g, 'ピ')
.replace(/プ/g, 'プ')
.replace(/ペ/g, 'ペ')
.replace(/ポ/g, 'ポ')
.replace(/ヴ/g, 'ヴ')
.replace(/ヲ/g, 'ヲ')
.replace(/ァ/g, 'ァ')
.replace(/ィ/g, 'ィ')
.replace(/ゥ/g, 'ゥ')
.replace(/ェ/g, 'ェ')
.replace(/ォ/g, 'ォ')
.replace(/ャ/g, 'ャ')
.replace(/ュ/g, 'ュ')
.replace(/ョ/g, 'ョ')
.replace(/ッ/g, 'ッ')
.replace(/ー/g, 'ー')
.replace(/ア/g, 'ア')
.replace(/イ/g, 'イ')
.replace(/ウ/g, 'ウ')
.replace(/エ/g, 'エ')
.replace(/オ/g, 'オ')
.replace(/カ/g, 'カ')
.replace(/キ/g, 'キ')
.replace(/ク/g, 'ク')
.replace(/ケ/g, 'ケ')
.replace(/コ/g, 'コ')
.replace(/サ/g, 'サ')
.replace(/シ/g, 'シ')
.replace(/ス/g, 'ス')
.replace(/セ/g, 'セ')
.replace(/ソ/g, 'ソ')
.replace(/タ/g, 'タ')
.replace(/チ/g, 'チ')
.replace(/ツ/g, 'ツ')
.replace(/テ/g, 'テ')
.replace(/ト/g, 'ト')
.replace(/ナ/g, 'ナ')
.replace(/ニ/g, 'ニ')
.replace(/ヌ/g, 'ヌ')
.replace(/ネ/g, 'ネ')
.replace(/ノ/g, 'ノ')
.replace(/ハ/g, 'ハ')
.replace(/ヒ/g, 'ヒ')
.replace(/フ/g, 'フ')
.replace(/ヘ/g, 'ヘ')
.replace(/ホ/g, 'ホ')
.replace(/マ/g, 'マ')
.replace(/ミ/g, 'ミ')
.replace(/ム/g, 'ム')
.replace(/メ/g, 'メ')
.replace(/モ/g, 'モ')
.replace(/ヤ/g, 'ヤ')
.replace(/ユ/g, 'ユ')
.replace(/ヨ/g, 'ヨ')
.replace(/ラ/g, 'ラ')
.replace(/リ/g, 'リ')
.replace(/ル/g, 'ル')
.replace(/レ/g, 'レ')
.replace(/ロ/g, 'ロ')
.replace(/ワ/g, 'ワ')
.replace(/ン/g, 'ン')
.replace(/゙/g, '゛')
.replace(/゚/g, '゜');
}
 
// 約物
function punctuation_marks(s) {
return s
.replace(/。。。|、、、/g, '…')
.replace(/・・・/g, '…')
.replace(/!!/g, '!!')
.replace(/!?/g, '!?')
.replace(/?!/g, '?!')
.replace(/??/g, '??')
.replace(/([^\/])(~|~)/g, '$1〜') //全角チルダ(U+FF5E)やチルダ(U+007E)を波ダッシュ(U+301C)に変更
.replace(/‥/g, '…')
.replace(/〇|◯/g, '○'); //漢数字のゼロ「〇」や大きな丸「◯」を丸「○」に変更
}
 
// ローマ数字
function roman_numerals(s) {
return s
.replace(/Ⅰ/g, 'I')
.replace(/Ⅱ/g, 'II')
.replace(/Ⅲ/g, 'III')
.replace(/Ⅳ/g, 'IV')
.replace(/Ⅴ/g, 'V')
.replace(/Ⅵ/g, 'VI')
.replace(/Ⅶ/g, 'VII')
.replace(/Ⅷ/g, 'VIII')
.replace(/Ⅸ/g, 'IX')
.replace(/Ⅹ/g, 'X')
.replace(/Ⅺ/g, 'XI')
.replace(/Ⅻ/g, 'XII')
.replace(/ⅰ/g, 'i')
.replace(/ⅱ/g, 'ii')
.replace(/ⅲ/g, 'iii')
.replace(/ⅳ/g, 'iv')
.replace(/ⅴ/g, 'v')
.replace(/ⅵ/g, 'vi')
.replace(/ⅶ/g, 'vii')
.replace(/ⅷ/g, 'viii')
.replace(/ⅸ/g, 'ix')
.replace(/ⅹ/g, 'x')
.replace(/ⅺ/g, 'xi')
.replace(/ⅻ/g, 'xii');
}
 
// 丸数字
function circled_numbers(s) {
return s
.replace(/①/g, '(1)')
.replace(/②/g, '(2)')
.replace(/③/g, '(3)')
.replace(/④/g, '(4)')
.replace(/⑤/g, '(5)')
.replace(/⑥/g, '(6)')
.replace(/⑦/g, '(7)')
.replace(/⑧/g, '(8)')
.replace(/⑨/g, '(9)')
.replace(/⑩/g, '(10)')
.replace(/⑪/g, '(11)')
.replace(/⑫/g, '(12)')
.replace(/⑬/g, '(13)')
.replace(/⑭/g, '(14)')
.replace(/⑮/g, '(15)')
.replace(/⑯/g, '(16)')
.replace(/⑰/g, '(17)')
.replace(/⑱/g, '(18)')
.replace(/⑲/g, '(19)')
.replace(/⑳/g, '(20)')
.replace(/㉑/g, '(21)')
.replace(/㉒/g, '(22)')
.replace(/㉓/g, '(23)')
.replace(/㉔/g, '(24)')
.replace(/㉕/g, '(25)')
.replace(/㉖/g, '(26)')
.replace(/㉗/g, '(27)')
.replace(/㉘/g, '(28)')
.replace(/㉙/g, '(29)')
.replace(/㉚/g, '(30)')
.replace(/㉛/g, '(31)')
.replace(/㉜/g, '(32)')
.replace(/㉝/g, '(33)')
.replace(/㉞/g, '(34)')
.replace(/㉟/g, '(35)')
.replace(/㊱/g, '(36)')
.replace(/㊲/g, '(37)')
.replace(/㊳/g, '(38)')
.replace(/㊴/g, '(39)')
.replace(/㊵/g, '(40)')
.replace(/㊶/g, '(41)')
.replace(/㊷/g, '(42)')
.replace(/㊸/g, '(43)')
.replace(/㊹/g, '(44)')
.replace(/㊺/g, '(45)')
.replace(/㊻/g, '(46)')
.replace(/㊼/g, '(47)')
.replace(/㊽/g, '(48)')
.replace(/㊾/g, '(49)')
.replace(/㊿/g, '(50)');
}
 
// 空白
function space(s) {
return s
.replace(/ {2,}/g, ' ') //連続する空白を除去
.replace(/([^=\-\|]) $/gm, '$1') //行末の空白を除去
.replace(/ 。/g, '。') //句点の前の空白を除去
.replace(/([^\-]) 、/g, '$1、') //読点の前の空白を除去
.replace(/。 ([^#\-\|].*?)。/g, '。$1。') //句点の後の空白を除去(1周目)
.replace(/。 ([^#\-\|].*?)。/g, '。$1。') //句点の後の空白を除去(2周目)
.replace(/、 ([^\-].*?)、/g, '、$1、') //読点の後の空白を除去(1周目)
.replace(/、 ([^\-].*?)、/g, '、$1、') //読点の後の空白を除去(2周目)
.replace(/、 ([^\-].*?)。/g, '、$1。') //読点の後の空白を除去
.replace(/(==+)( ?)(.*?)( ?)(==+)/g, '$1 $3 $5'); //見出しに空白を追加
}
 
// 改行・空行
function line_breaks_and_blank_lines(s) {
return s
.replace(/\n{3,}/g, '\n\n') //2行以上の空行をトルツメ
.replace(/==\n\n/g, '==\n') //見出しの後の空行をトルツメ
.replace(/([^=\n])\n==/g, '$1\n\n==') //見出しの前に空行を挿入
.replace(/\n\n(===+) 注釈 (===+)/g, '\n$1 注釈 $2') //レベル3以降の注釈見出しの前の空行をトルツメ
.replace(/\n\n(===+) 出典 (===+)/g, '\n$1 出典 $2') //レベル3以降の出典見出しの前の空行をトルツメ
.replace(/\[\[File:/g, '[[ファイル:') //[[ファイル:に変更
.replace(/([^\n =\|>])\[\[ファイル:/g, '$1\n[[ファイル:'); //[[ファイル:の前に改行を追加
}
 
// 箇条書き
function bullet_points(s) {
return s
.replace(/^(\*+|#+|:+\*|:+#)([^ \*#:;].*?)/gm, '$1 $2') //箇条書きのあとに空白を追加
.replace(/^(;|:+;)([^ ].*?)/gm, '$1 $2') //定義の箇条書き(;)のあとに空白を追加
.replace(/^(:+)([^ \*#:;<\n].*?)/gm, '$1 $2') //定義の箇条書き(:)のあとに空白を追加
.replace(/^([^=\*#:;].*?。)\n(\*|#|;|:)/gm, '$1\n\n$2') //文章と箇条書きの間に空行を挿入
.replace(/^(\*|#|;|:)(.*?)\n([^\n=\*#:;].*?。)/gm, '$1$2\n\n$3') //箇条書きと文章の間に空行を挿入
.replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目)
.replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(2周目)
.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目)
.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'); //箇条書きと箇条書きの間の空行をトルツメ(2周目)
}
 
// 1行改行
function single_line_break(s) {
return s
.replace(/。\n([^\n\*#;:<\|].*?)。/g, '。$1。') //句点の後の1行改行をトルツメ(1周目)
.replace(/。\n([^\n\*#;:<\|].*?)。/g, '。$1。') //句点の後の1行改行をトルツメ(2周目)
.replace(/、\n([^\n\*#;:].*?)/g, '、$1') //読点の後の1行改行をトルツメ(1周目)
.replace(/、\n([^\n\*#;:].*?)/g, '、$1') //読点の後の1行改行をトルツメ(2周目)
.replace(/<br \/>\n([^\n\*#;:].*?)/g, '<br />$1') //改行タグの後の1行改行をトルツメ(1周目)
.replace(/<br \/>\n([^\n\*#;:].*?)/g, '<br />$1'); //改行タグの後の1行改行をトルツメ(2周目)
}
 
// 表・Infobox
function tables_and_infoboxes(s) {
return s
.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(1周目)
.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(2周目)
.replace(/^!(.*?)\n\n!/gm, '!$1\n!') //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(1周目)
.replace(/^!(.*?)\n\n!/gm, '!$1\n!'); //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(2周目)
}
 
// タグ
function tag(s) {
return s
.replace(/<br( ?)>|<br\/>/g, '<br />');
}
 
// ウィキリンク
function wikilinks(s) {
return s
.replace(/\[\[(カテゴリ|category):/g, '[[Category:');
}
 
// リダイレクト
function redirect(s) {
return s
.replace(/# REDIRECT/g, '#REDIRECT')
.replace(/# redirect/g, '#redirect')
.replace(/# 転送/g, '#転送')
.replace(/#redirect|#転送/g, '#REDIRECT')
.replace(/#REDIRECT( ?)\[\[/g, '#REDIRECT [[');
}
 
// マジックリンク
function magic_links(s) {
return s
.replace(/ISBN ([\d\-X]{10,17})/g, '{{ISBN|$1}}')
.replace(/PMID ([\d]{1,8})/g, '{{PMID|$1}}')
.replace(/RFC ([\d]{1,4})/g, '{{IETF RFC|$1}}');
}


if (document.selection.Text == "")
// テンプレート
    document.selection.SelectAll();
function templates(s) {
return s
.replace(/{{a/g, '{{A')
.replace(/{{b/g, '{{B')
.replace(/{{c/g, '{{C')
.replace(/{{d/g, '{{D')
.replace(/{{e/g, '{{E')
.replace(/{{f/g, '{{F')
.replace(/{{g/g, '{{G')
.replace(/{{h/g, '{{H')
.replace(/{{i/g, '{{I')
.replace(/{{j/g, '{{J')
.replace(/{{k/g, '{{K')
.replace(/{{l/g, '{{L')
.replace(/{{m/g, '{{M')
.replace(/{{n/g, '{{N')
.replace(/{{o/g, '{{O')
.replace(/{{p/g, '{{P')
.replace(/{{q/g, '{{Q')
.replace(/{{r/g, '{{R')
.replace(/{{s/g, '{{S')
.replace(/{{t/g, '{{T')
.replace(/{{u/g, '{{U')
.replace(/{{v/g, '{{V')
.replace(/{{w/g, '{{W')
.replace(/{{x/g, '{{X')
.replace(/{{y/g, '{{Y')
.replace(/{{z/g, '{{Z')
.replace(/{{Tl\|a/g, '{{Tl|A')
.replace(/{{Tl\|b/g, '{{Tl|B')
.replace(/{{Tl\|c/g, '{{Tl|C')
.replace(/{{Tl\|d/g, '{{Tl|D')
.replace(/{{Tl\|e/g, '{{Tl|E')
.replace(/{{Tl\|f/g, '{{Tl|F')
.replace(/{{Tl\|g/g, '{{Tl|G')
.replace(/{{Tl\|h/g, '{{Tl|H')
.replace(/{{Tl\|i/g, '{{Tl|I')
.replace(/{{Tl\|j/g, '{{Tl|J')
.replace(/{{Tl\|k/g, '{{Tl|K')
.replace(/{{Tl\|l/g, '{{Tl|L')
.replace(/{{Tl\|m/g, '{{Tl|M')
.replace(/{{Tl\|n/g, '{{Tl|N')
.replace(/{{Tl\|o/g, '{{Tl|O')
.replace(/{{Tl\|p/g, '{{Tl|P')
.replace(/{{Tl\|q/g, '{{Tl|Q')
.replace(/{{Tl\|r/g, '{{Tl|R')
.replace(/{{Tl\|s/g, '{{Tl|S')
.replace(/{{Tl\|t/g, '{{Tl|T')
.replace(/{{Tl\|u/g, '{{Tl|U')
.replace(/{{Tl\|v/g, '{{Tl|V')
.replace(/{{Tl\|w/g, '{{Tl|W')
.replace(/{{Tl\|x/g, '{{Tl|X')
.replace(/{{Tl\|y/g, '{{Tl|Y')
.replace(/{{Tl\|z/g, '{{Tl|Z')
.replace(/{{デフォルトソート:/g, '{{DEFAULTSORT:');
}


var s1 = document.selection.Text;
// 注釈
var s2 = "";
function notes(s) {
return s
.replace(/group( ?)=( ?)("?)(注釈|注|†|※|\*)("?)/g, 'group="注"') //group="注"に変更
.replace(/{{#tag:ref/g, '{{Refnest') //{{Refnestに変更
.replace(/([^\n]){{Refnest\|/g, '$1\n{{Refnest|') //{{Refnest|の前に改行を追加
.replace(/{{Refnest\|(.*?)\|group="注"\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Refnest|$1|group="注"|name="$4"}}') //name引数に二重引用符を追加
.replace(/{{Refnest\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)\|group="注"}}/g, '{{Refnest|$1|name="$4"|group="注"}}') //name引数に二重引用符を追加
.replace(/{{Refnest\|group="注"\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Refnest|group="注"|$1|name="$4"}}') //name引数に二重引用符を追加
.replace(/{{Refnest\|name( ?)=( ?)([^"].*?)( ?)\|(.*?)\|group="注"}}/g, '{{Refnest|name="$3"|$5|group="注"}}') //name引数に二重引用符を追加
.replace(/{{Refnest\|group="注"( ?)\|name( ?)=( ?)([^"].*?)( ?)\|/g, '{{Refnest|group="注"|name="$4"|') //name引数に二重引用符を追加
.replace(/{{Refnest\|name( ?)=( ?)([^"].*?)( ?)\|group="注"( ?)\|/g, '{{Refnest|name="$3"|group="注"|') //name引数に二重引用符を追加
.replace(/{{Refnest\|(.*?)\|group="注"\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/{{Refnest\|(.*?)\|name=(.*?)\|group="注"}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/{{Refnest\|group="注"\|(.*?)\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/{{Refnest\|name=(.*?)\|(.*?)\|group="注"}}/g, '{{Efn2|name=$1|$2}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/{{Refnest\|group="注"\|name=(.*?)\|/g, '{{Efn2|name=$1|') //{{Efn2|name="○○"|に変更
.replace(/{{Refnest\|name=(.*?)\|group="注"\|/g, '{{Efn2|name=$1|') //{{Efn2|name="○○"|に変更
.replace(/{{Refnest\|(.*?)\|group="注"}}/g, '{{Efn2|$1}}') //{{Efn2|○○}}に変更
.replace(/{{Refnest\|group="注"( ?)\|/g, '{{Efn2|') //{{Efn2|に変更
.replace(/{{Refnest/g, '{{Efn2') //{{Efn2に変更
.replace(/{{Efn\|/g, '{{Efn2|') //{{Efn2|に変更
.replace(/([^\n]){{Efn2\|/g, '$1\n{{Efn2|') //{{Efn2|の前に改行を追加
.replace(/{{Efn2\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Efn2|$1|name="$4"}}') //name引数に二重引用符を追加
.replace(/{{Efn2\|name( ?)=( ?)([^"].*?)( ?)(\||})/g, '{{Efn2|name="$3"$5') //name引数に二重引用符を追加
.replace(/{{Efn2\|(.*?)\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/([^\n])<ref([>| ])/g, '$1\n<ref$2') //<ref>の前に改行を追加
.replace(/<ref group="注" name( ?)=( ?)([^"].*?)( ?)>(.*?)<\/ref>/g, '<ref group="注" name="$3">$5</ref>') //name引数に二重引用符を追加
.replace(/<ref name( ?)=( ?)([^"].*?) group="注">(.*?)<\/ref>/g, '<ref name="$3" group="注">$4</ref>') //name引数に二重引用符を追加
.replace(/<ref group="注" name( ?)=( ?)([^"].*?)( ?)\/>/g, '<ref group="注" name="$3" />') //name引数に二重引用符を追加
.replace(/<ref name( ?)=( ?)([^"].*?) group="注"( ?)\/>/g, '<ref name="$3" group="注" />') //name引数に二重引用符を追加
.replace(/<ref group="注"( ?)name=(".*?")>(.*?)<\/ref>/g, '{{Efn2|name=$2|$3}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/<ref name=(".*?")( ?)group="注">(.*?)<\/ref>/g, '{{Efn2|name=$1|$3}}') //{{Efn2|name="○○"|○○}}に変更
.replace(/<ref group="注"( ?)name( ?)=( ?)(".*?")( ?)\/>/g, '{{Efn2|name=$4}}') //{{Efn2|name="○○"}}に変更
.replace(/<ref name( ?)=( ?)(".*?")( ?)group="注"( ?)\/>/g, '{{Efn2|name=$3}}') //{{Efn2|name="○○"}}に変更
.replace(/<ref group=""( ?)>(.*?)<\/ref>/g, '{{Efn2|$2}}') //{{Efn2|○○}}に変更
.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去
.replace(/([^\n])\n{{Efn2\|/g, '$1{{Efn2|'); //{{Efn2|の前の改行を除去
}


s2 = s1.
// 出典
    // Unicode制御文字
function references(s) {
    replace(/‎/g, ''). //Left-to-right mark(U+200E)の除去
return s
    replace(/‏/g, ''). //Right-to-left mark(U+200F)の除去
.replace(/([^\n])<ref([>| ])/g, '$1\n<ref$2') //<ref>の前に改行を追加
    replace(/‍/g, ''). //Zero width joiner(U+200D)の除去
.replace(/<ref name( ?)=( ?)([^"].*?)( ?)>(.*?)<\/ref>/g, '<ref name="$3">$5</ref>') //name引数に二重引用符を追加
    replace(/‌/g, ''). //Zero width non-joiner(U+200C)の除去
.replace(/<ref name( ?)=( ?)([^"].*?)( ?)\/>/g, '<ref name="$3" />') //name引数に二重引用符を追加
    replace(/‪/g, ''). //Left-to-right embedding(U+202A)の除去
.replace(/<ref name( ?)=( ?)"(.*?)"( ?)\/>/g, '{{R|$3}}') //{{R|○○}}に変更
    replace(/‭/g, ''). //Left-to-right override(U+202D)の除去
.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去
    replace(/‬/g, ''). //Pop directional formatting(U+202C)の除去
.replace(/([^\n])\n{{R\|/g, '$1{{R|'); //{{R|の前の改行を除去
    replace(//g, ''). //National digit shapes(U+206E)の除去
}
    replace(//g, ''). //Nominal digit shapes(U+206F)の除去
    replace(//g, ''). //Activate symmetric swapping(U+206B)の除去
    replace(//g, ''). //Inhibit symmetric swapping(U+206A)の除去
    replace(//g, ''). //Activate Arabic form shaping(U+206D)の除去
    replace(//g, ''). //Inhibit Arabic form shaping(U+206C)の除去
    replace(/�/g, ''). //Record Separator(U+001E)の除去
    replace(/�/g, ''). //Unit Separator(U+001F)の除去
    // 全角英数・記号
    replace(/ /g, ' ').
    replace(/“|”/g, '"').
    replace(/#/g, '#').
    replace(/$/g, '$').
    replace(/%/g, '%').
    replace(/&/g, '&').
    replace(/‘|’/g, '\'').
    replace(/*/g, '*').
    replace(/+/g, '+').
    replace(/,/g, ',').
    replace(/-/g, '-').
    replace(/./g, '.').
    replace(///g, '/').
    replace(/0/g, '0').
    replace(/1/g, '1').
    replace(/2/g, '2').
    replace(/3/g, '3').
    replace(/4/g, '4').
    replace(/5/g, '5').
    replace(/6/g, '6').
    replace(/7/g, '7').
    replace(/8/g, '8').
    replace(/9/g, '9').
    replace(/;/g, ';').
    replace(/</g, '<').
    replace(/>/g, '>').
    replace(/@/g, '@').
    replace(/A/g, 'A').
    replace(/B/g, 'B').
    replace(/C/g, 'C').
    replace(/D/g, 'D').
    replace(/E/g, 'E').
    replace(/F/g, 'F').
    replace(/G/g, 'G').
    replace(/H/g, 'H').
    replace(/I/g, 'I').
    replace(/J/g, 'J').
    replace(/K/g, 'K').
    replace(/L/g, 'L').
    replace(/M/g, 'M').
    replace(/N/g, 'N').
    replace(/O/g, 'O').
    replace(/P/g, 'P').
    replace(/Q/g, 'Q').
    replace(/R/g, 'R').
    replace(/S/g, 'S').
    replace(/T/g, 'T').
    replace(/U/g, 'U').
    replace(/V/g, 'V').
    replace(/W/g, 'W').
    replace(/X/g, 'X').
    replace(/Y/g, 'Y').
    replace(/Z/g, 'Z').
    replace(/¥/g, '\\').
    replace(/^/g, '^').
    replace(/_/g, '_').
    replace(/`/g, '`').
    replace(/a/g, 'a').
    replace(/b/g, 'b').
    replace(/c/g, 'c').
    replace(/d/g, 'd').
    replace(/e/g, 'e').
    replace(/f/g, 'f').
    replace(/g/g, 'g').
    replace(/h/g, 'h').
    replace(/i/g, 'i').
    replace(/j/g, 'j').
    replace(/k/g, 'k').
    replace(/l/g, 'l').
    replace(/m/g, 'm').
    replace(/n/g, 'n').
    replace(/o/g, 'o').
    replace(/p/g, 'p').
    replace(/q/g, 'q').
    replace(/r/g, 'r').
    replace(/s/g, 's').
    replace(/t/g, 't').
    replace(/u/g, 'u').
    replace(/v/g, 'v').
    replace(/w/g, 'w').
    replace(/x/g, 'x').
    replace(/y/g, 'y').
    replace(/z/g, 'z').
    // 半角カナ
    replace(/。/g, '。').
    replace(/「/g, '「').
    replace(/」/g, '」').
    replace(/、/g, '、').
    replace(/・/g, '・').
    replace(/ガ/g, 'ガ').
    replace(/ギ/g, 'ギ').
    replace(/グ/g, 'グ').
    replace(/ゲ/g, 'ゲ').
    replace(/ゴ/g, 'ゴ').
    replace(/ザ/g, 'ザ').
    replace(/ジ/g, 'ジ').
    replace(/ズ/g, 'ズ').
    replace(/ゼ/g, 'ゼ').
    replace(/ゾ/g, 'ゾ').
    replace(/ダ/g, 'ダ').
    replace(/ヂ/g, 'ヂ').
    replace(/ヅ/g, 'ヅ').
    replace(/デ/g, 'デ').
    replace(/ド/g, 'ド').
    replace(/バ/g, 'バ').
    replace(/ビ/g, 'ビ').
    replace(/ブ/g, 'ブ').
    replace(/ベ/g, 'ベ').
    replace(/ボ/g, 'ボ').
    replace(/パ/g, 'パ').
    replace(/ピ/g, 'ピ').
    replace(/プ/g, 'プ').
    replace(/ペ/g, 'ペ').
    replace(/ポ/g, 'ポ').
    replace(/ヴ/g, 'ヴ').
    replace(/ヲ/g, 'ヲ').
    replace(/ァ/g, 'ァ').
    replace(/ィ/g, 'ィ').
    replace(/ゥ/g, 'ゥ').
    replace(/ェ/g, 'ェ').
    replace(/ォ/g, 'ォ').
    replace(/ャ/g, 'ャ').
    replace(/ュ/g, 'ュ').
    replace(/ョ/g, 'ョ').
    replace(/ッ/g, 'ッ').
    replace(/ー/g, 'ー').
    replace(/ア/g, 'ア').
    replace(/イ/g, 'イ').
    replace(/ウ/g, 'ウ').
    replace(/エ/g, 'エ').
    replace(/オ/g, 'オ').
    replace(/カ/g, 'カ').
    replace(/キ/g, 'キ').
    replace(/ク/g, 'ク').
    replace(/ケ/g, 'ケ').
    replace(/コ/g, 'コ').
    replace(/サ/g, 'サ').
    replace(/シ/g, 'シ').
    replace(/ス/g, 'ス').
    replace(/セ/g, 'セ').
    replace(/ソ/g, 'ソ').
    replace(/タ/g, 'タ').
    replace(/チ/g, 'チ').
    replace(/ツ/g, 'ツ').
    replace(/テ/g, 'テ').
    replace(/ト/g, 'ト').
    replace(/ナ/g, 'ナ').
    replace(/ニ/g, 'ニ').
    replace(/ヌ/g, 'ヌ').
    replace(/ネ/g, 'ネ').
    replace(/ノ/g, 'ノ').
    replace(/ハ/g, 'ハ').
    replace(/ヒ/g, 'ヒ').
    replace(/フ/g, 'フ').
    replace(/ヘ/g, 'ヘ').
    replace(/ホ/g, 'ホ').
    replace(/マ/g, 'マ').
    replace(/ミ/g, 'ミ').
    replace(/ム/g, 'ム').
    replace(/メ/g, 'メ').
    replace(/モ/g, 'モ').
    replace(/ヤ/g, 'ヤ').
    replace(/ユ/g, 'ユ').
    replace(/ヨ/g, 'ヨ').
    replace(/ラ/g, 'ラ').
    replace(/リ/g, 'リ').
    replace(/ル/g, 'ル').
    replace(/レ/g, 'レ').
    replace(/ロ/g, 'ロ').
    replace(/ワ/g, 'ワ').
    replace(/ン/g, 'ン').
    replace(/゙/g, '゛').
    replace(/゚/g, '゜').
    // 仮名
    replace(/ヶ月/g, 'か月').
    replace(/ヶ所/g, 'か所').
    replace(/ヶ条/g, 'か条').
    replace(/迄/g, 'まで').
    replace(/下さい/g, 'ください').
    replace(/或いは/g, 'あるいは').
    replace(/及び/g, 'および').
    replace(/且つ/g, 'かつ').
    replace(/。更に/g, '。さらに').
    replace(/、更に/g, '、さらに').
    replace(/併し|然し/g, 'しかし').
    replace(/然も/g, 'しかも').
    replace(/即ち/g, 'すなわち').
    replace(/反れとも/g, 'それとも').
    replace(/但し/g, 'ただし').
    replace(/因みに/g, 'ちなみに').
    replace(/。所で/g, '。ところで').
    replace(/。尚/g, '。なお').
    replace(/尚、/g, 'なお、').
    replace(/並びに/g, 'ならびに').
    replace(/又は/g, 'または').
    replace(/若しくは/g, 'もしくは').
    replace(/が故に/g, 'がゆえに').
    replace(/それ故/g, 'それゆえ').
    replace(/或る/g, 'ある').
    replace(/所謂/g, 'いわゆる').
    replace(/其の/g, 'その').
    replace(/貴方/g, 'あなた').
    replace(/其れ/g, 'それ').
    replace(/何時/g, 'いつ').
    replace(/何処/g, 'どこ').
    replace(/何故/g, 'なぜ').
    replace(/有り難う/g, 'ありがとう').
    replace(/嗚呼/g, 'ああ').
    replace(/その内、/g, 'そのうち、').
    replace(/。その内/g, '。そのうち').
    replace(/の為に/g, 'のために').
    replace(/る為に/g, 'るために').
    replace(/凡そ/g, 'およそ').
    replace(/流石/g, 'さすが').
    replace(/殆ど/g, 'ほとんど').
    replace(/御菓子/g, 'お菓子').
    replace(/御加護/g, 'ご加護').
    replace(/高目/g, '高め').
    replace(/誤魔化す/g, 'ごまかす').
    replace(/蒲公英/g, 'タンポポ').
    replace(/流行り/g, 'はやり').
    replace(/沢山/g, 'たくさん').
    replace(/面倒/g, 'めんどう').
    replace(/関わらず/g, 'かかわらず').
    replace(/散りばめる/g, 'ちりばめる').
    // 約物
    replace(/。。。|、、、/g, '…').
    replace(/・・・/g, '…').
    replace(/!!/g, '!!').
    replace(/!?/g, '!?').
    replace(/?!/g, '?!').
    replace(/??/g, '??').
    replace(/~|~/g, '〜'). //全角チルダ(U+FF5E)やチルダ(U+007E)を波ダッシュ(U+301C)に変更
    replace(/‥/g, '…').
    replace(/〇|◯/g, '○'). //漢数字のゼロ「〇」や大きな丸「◯」を丸「○」に変更
    // ローマ数字
    replace(/Ⅰ/g, 'I').
    replace(/Ⅱ/g, 'II').
    replace(/Ⅲ/g, 'III').
    replace(/Ⅳ/g, 'IV').
    replace(/Ⅴ/g, 'V').
    replace(/Ⅵ/g, 'VI').
    replace(/Ⅶ/g, 'VII').
    replace(/Ⅷ/g, 'VIII').
    replace(/Ⅸ/g, 'IX').
    replace(/Ⅹ/g, 'X').
    replace(/Ⅺ/g, 'XI').
    replace(/Ⅻ/g, 'XII').
    replace(/ⅰ/g, 'i').
    replace(/ⅱ/g, 'ii').
    replace(/ⅲ/g, 'iii').
    replace(/ⅳ/g, 'iv').
    replace(/ⅴ/g, 'v').
    replace(/ⅵ/g, 'vi').
    replace(/ⅶ/g, 'vii').
    replace(/ⅷ/g, 'viii').
    replace(/ⅸ/g, 'ix').
    replace(/ⅹ/g, 'x').
    replace(/ⅺ/g, 'xi').
    replace(/ⅻ/g, 'xii').
    // 丸数字
    replace(/①/g, '(1)').
    replace(/②/g, '(2)').
    replace(/③/g, '(3)').
    replace(/④/g, '(4)').
    replace(/⑤/g, '(5)').
    replace(/⑥/g, '(6)').
    replace(/⑦/g, '(7)').
    replace(/⑧/g, '(8)').
    replace(/⑨/g, '(9)').
    replace(/⑩/g, '(10)').
    replace(/⑪/g, '(11)').
    replace(/⑫/g, '(12)').
    replace(/⑬/g, '(13)').
    replace(/⑭/g, '(14)').
    replace(/⑮/g, '(15)').
    replace(/⑯/g, '(16)').
    replace(/⑰/g, '(17)').
    replace(/⑱/g, '(18)').
    replace(/⑲/g, '(19)').
    replace(/⑳/g, '(20)').
    replace(/㉑/g, '(21)').
    replace(/㉒/g, '(22)').
    replace(/㉓/g, '(23)').
    replace(/㉔/g, '(24)').
    replace(/㉕/g, '(25)').
    replace(/㉖/g, '(26)').
    replace(/㉗/g, '(27)').
    replace(/㉘/g, '(28)').
    replace(/㉙/g, '(29)').
    replace(/㉚/g, '(30)').
    replace(/㉛/g, '(31)').
    replace(/㉜/g, '(32)').
    replace(/㉝/g, '(33)').
    replace(/㉞/g, '(34)').
    replace(/㉟/g, '(35)').
    replace(/㊱/g, '(36)').
    replace(/㊲/g, '(37)').
    replace(/㊳/g, '(38)').
    replace(/㊴/g, '(39)').
    replace(/㊵/g, '(40)').
    replace(/㊶/g, '(41)').
    replace(/㊷/g, '(42)').
    replace(/㊸/g, '(43)').
    replace(/㊹/g, '(44)').
    replace(/㊺/g, '(45)').
    replace(/㊻/g, '(46)').
    replace(/㊼/g, '(47)').
    replace(/㊽/g, '(48)').
    replace(/㊾/g, '(49)').
    replace(/㊿/g, '(50)').
    // 空白
    replace(/ {2,}/g, ' '). //連続する空白を除去
    replace(/([^=\-\|]) $/gm, '$1'). //行末の空白を除去
    replace(/ 。/g, '。'). //句点の前の空白を除去
    replace(/([^\-]) 、/g, '$1、'). //読点の前の空白を除去
    replace(/。 ([^#\-\|].+?)。/g, '。$1。'). //句点の後の空白を除去
    replace(/、 (.+?)。/g, '、$1。'). //読点の後の空白を除去
    replace(/(==+)\s?(.+?)\s?(==+)/g, '$1 $2 $3'). //見出しに空白を追加
    // 改行・空白行
    replace(/\n{3,}/g, '\n\n'). //2行以上の空白行をトルツメ
    replace(/==\n\n/g, '==\n'). //見出しの後の空白行をトルツメ
    replace(/([^=\n])\n==/g, '$1\n\n=='). //見出しの前に空白行を挿入
    replace(/\n\n(===+) 注釈 (===+)/g, '\n$1 注釈 $2'). //レベル3以降の注釈見出しの前の空白行をトルツメ
    replace(/\n\n(===+) 出典 (===+)/g, '\n$1 出典 $2'). //レベル3以降の出典見出しの前の空白行をトルツメ
    replace(/。\n([^\n\*#;:<].+?)。/g, '。$1。'). //1行改行をトルツメ
    // テンプレート
    replace(/{{a/g, '{{A').
    replace(/{{b/g, '{{B').
    replace(/{{c/g, '{{C').
    replace(/{{d/g, '{{D').
    replace(/{{e/g, '{{E').
    replace(/{{f/g, '{{F').
    replace(/{{g/g, '{{G').
    replace(/{{h/g, '{{H').
    replace(/{{i/g, '{{I').
    replace(/{{j/g, '{{J').
    replace(/{{k/g, '{{K').
    replace(/{{l/g, '{{L').
    replace(/{{m/g, '{{M').
    replace(/{{n/g, '{{N').
    replace(/{{o/g, '{{O').
    replace(/{{p/g, '{{P').
    replace(/{{q/g, '{{Q').
    replace(/{{r/g, '{{R').
    replace(/{{s/g, '{{S').
    replace(/{{t/g, '{{T').
    replace(/{{u/g, '{{U').
    replace(/{{v/g, '{{V').
    replace(/{{w/g, '{{W').
    replace(/{{x/g, '{{X').
    replace(/{{y/g, '{{Y').
    replace(/{{z/g, '{{Z').
    replace(/{{Tl\|a/g, '{{Tl|A').
    replace(/{{Tl\|b/g, '{{Tl|B').
    replace(/{{Tl\|c/g, '{{Tl|C').
    replace(/{{Tl\|d/g, '{{Tl|D').
    replace(/{{Tl\|e/g, '{{Tl|E').
    replace(/{{Tl\|f/g, '{{Tl|F').
    replace(/{{Tl\|g/g, '{{Tl|G').
    replace(/{{Tl\|h/g, '{{Tl|H').
    replace(/{{Tl\|i/g, '{{Tl|I').
    replace(/{{Tl\|j/g, '{{Tl|J').
    replace(/{{Tl\|k/g, '{{Tl|K').
    replace(/{{Tl\|l/g, '{{Tl|L').
    replace(/{{Tl\|m/g, '{{Tl|M').
    replace(/{{Tl\|n/g, '{{Tl|N').
    replace(/{{Tl\|o/g, '{{Tl|O').
    replace(/{{Tl\|p/g, '{{Tl|P').
    replace(/{{Tl\|q/g, '{{Tl|Q').
    replace(/{{Tl\|r/g, '{{Tl|R').
    replace(/{{Tl\|s/g, '{{Tl|S').
    replace(/{{Tl\|t/g, '{{Tl|T').
    replace(/{{Tl\|u/g, '{{Tl|U').
    replace(/{{Tl\|v/g, '{{Tl|V').
    replace(/{{Tl\|w/g, '{{Tl|W').
    replace(/{{Tl\|x/g, '{{Tl|X').
    replace(/{{Tl\|y/g, '{{Tl|Y').
    replace(/{{Tl\|z/g, '{{Tl|Z').
    replace(/{{デフォルトソート:/g, '{{DEFAULTSORT:').
    replace(/ISBN ([\d\-X]{10,17})/g, '{{ISBN2\|$1}}').
    replace(/PMID ([\d]{1,8})/g, '{{PMID\|$1}}').
    replace(/RFC ([\d]{1,4})/g, '{{IETF RFC\|$1}}').
    // 箇条書き
    replace(/^(\*+|#+|:+\*|:+#)([^ \*#:].+?)/gm, '$1 $2'). //箇条書きのあとに空白を追加
    replace(/^(;|:+;)([^ ].+?)/gm, '$1 $2'). //定義の箇条書き(;)のあとに空白を追加
    replace(/^(:+)([^ \*#:;<\n].+?)/gm, '$1 $2'). //定義の箇条書き(:)のあとに空白を追加
    replace(/^(:+) (\[\[声優\|声\]\]|声|演)(\s?)[::](\s?)(.+?)/gm, '$1 $2 - $5'). //声と声優名の間の区切り記号を変更
    replace(/^(\*|#|;|:)(.+?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'). //箇条書きと箇条書きの間の空白行をトルツメ(1周目)
    replace(/^(\*|#|;|:)(.+?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'). //箇条書きと箇条書きの間の空白行をトルツメ(2周目)
    // 表・Infobox
    replace(/^\|(.+?)\n\n\|/gm, '\|$1\n\|'). //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空白行をトルツメ(1周目)
    replace(/^\|(.+?)\n\n\|/gm, '\|$1\n\|'). //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空白行をトルツメ(2周目)
    replace(/^!(.+?)\n\n!/gm, '!$1\n!'). //行頭の感嘆符と次の行頭の感嘆符の間の空白行をトルツメ(1周目)
    replace(/^!(.+?)\n\n!/gm, '!$1\n!'). //行頭の感嘆符と次の行頭の感嘆符の間の空白行をトルツメ(2周目)
    // タグ
    replace(/<br(\s?)>|<br\/>/g, '<br />').
    // ウィキリンク
    replace(/\[\[(カテゴリ|category):/g, '[[Category:').
    // Template:R
    replace(/<ref name(\s?)=(\s?)([^"].+?[^"])>(.+?)<\/ref>/g, '<ref name="$3">$4</ref>'). //name属性に二重引用符を追加
    replace(/<ref name(\s?)=(\s?)([^"].+?[^"])(\s?)\/>/g, '<ref name="$3" />'). //name属性に二重引用符を追加
    replace(/<\/ref>([^\n\|}])/g, '</ref>\n$1'). //</ref>の後に改行を追加
    replace(/<ref name(\s?)=(\s?)"(.+?)"(\s?)\/>/g, '{{R|$3}}'). //<ref name="○○" />を{{R|○○}}に変更
    replace(/<\/ref>\n([^\n\|}\*;:])/g, '</ref>$1'). //</ref>の後の改行を除去
    // 脚注
    replace(/{{Refnest\|group(\s?)=(\s?)("?)(注釈|注)("?)/g, '{{Efn2').
    replace(/{{Efn\|/g, '{{Efn2|').
    replace(/group(\s?)=(\s?)("?)(注釈|注|†|※|\*)("?)/g, 'group="注"').
    replace(/<ref group="注">(.+?)<\/ref>/g, '{{Efn2|$1}}').
    replace(/<references(\s?)\/>/g, '{{Reflist}}').
    replace(/<references group="(注釈|注)" \/>/g, '{{Notelist2}}').
    replace(/{{Reflist\|\|group="注"}}/g, '{{Reflist\|group="注"\|}}').
    replace(/{{Reflist\|([0-9])\|group="注"}}/g, '{{Reflist\|group="注"\|$1}}').
    replace(/{{Reflist\|colwidth=/g, '{{Reflist\|').
    replace(/{{Reflist\|em\|group="注"}}/g, '{{Reflist\|group="注"\|em}}').
    replace(/{{Reflist\|([0-9]|[1-9][0-9])em\|group="注"}}/g, '{{Reflist\|group="注"\|$1em}}').
    replace(/{{Reflist\|group="(注釈|注)"}}/g, '{{Notelist2}}').
    replace(/{{Reflist\|group="注"\|/g, '{{Notelist2|').
    replace(/{{Notelist}}/g, '{{Notelist2}}').
    replace(/{{Notelist\|/g, '{{Notelist2|').
    replace(/list\|colwidth=/g, 'list|').
    replace(/list2\|colwidth=/g, 'list2|').
    replace(/{{Reflist\|}}/g, '{{Reflist}}').
    replace(/{{Reflist\|[0-1]}}/g, '{{Reflist}}').
    replace(/{{Reflist\|2}}/g, '{{Reflist|30em}}').
    replace(/{{Reflist\|[3-9]}}/g, '{{Reflist|20em}}').
    replace(/{{Notelist2\|}}/g, '{{Notelist2}}').
    replace(/{{Notelist2\|[0-1]}}/g, '{{Notelist2}}').
    replace(/{{Notelist2\|2}}/g, '{{Notelist2|30em}}').
    replace(/{{Notelist2\|[3-9]}}/g, '{{Notelist2|20em}}').
    replace(/{{Reflist\|em}}/g, '{{Reflist}}').
    replace(/{{Reflist\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Reflist|20em}}').
    replace(/{{Reflist\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Reflist|30em}}').
    replace(/{{Notelist2\|em}}/g, '{{Notelist2}}').
    replace(/{{Notelist2\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Notelist2|20em}}').
    replace(/{{Notelist2\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Notelist2|30em}}');


document.selection.Text = s2;
// 脚注
function footnotes(s) {
return s
.replace(/<references( ?)\/>/g, '{{Reflist}}')
.replace(/<references group="注"( ?)\/>/g, '{{Notelist2}}')
.replace(/{{Reflist\|\|group="注"}}/g, '{{Reflist|group="注"|}}')
.replace(/{{Reflist\|([0-9])\|group="注"}}/g, '{{Reflist|group="注"|$1}}')
.replace(/{{Reflist\|colwidth=/g, '{{Reflist|')
.replace(/{{Reflist\|em\|group="注"}}/g, '{{Reflist|group="注"|em}}')
.replace(/{{Reflist\|([0-9]|[1-9][0-9])em\|group="注"}}/g, '{{Reflist|group="注"|$1em}}')
.replace(/{{Reflist\|group="注"}}/g, '{{Notelist2}}')
.replace(/{{Reflist\|group="注"\|/g, '{{Notelist2|')
.replace(/{{Notelist}}/g, '{{Notelist2}}')
.replace(/{{Notelist\|/g, '{{Notelist2|')
.replace(/list\|colwidth=/g, 'list|')
.replace(/list2\|colwidth=/g, 'list2|')
.replace(/{{Reflist\|}}/g, '{{Reflist}}')
.replace(/{{Reflist\|[0-1]}}/g, '{{Reflist}}')
.replace(/{{Reflist\|2}}/g, '{{Reflist|30em}}')
.replace(/{{Reflist\|[3-9]}}/g, '{{Reflist|20em}}')
.replace(/{{Notelist2\|}}/g, '{{Notelist2}}')
.replace(/{{Notelist2\|[0-1]}}/g, '{{Notelist2}}')
.replace(/{{Notelist2\|2}}/g, '{{Notelist2|30em}}')
.replace(/{{Notelist2\|[3-9]}}/g, '{{Notelist2|20em}}')
.replace(/{{Reflist\|em}}/g, '{{Reflist}}')
.replace(/{{Reflist\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Reflist|20em}}')
.replace(/{{Reflist\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Reflist|30em}}')
.replace(/{{Notelist2\|em}}/g, '{{Notelist2}}')
.replace(/{{Notelist2\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Notelist2|20em}}')
.replace(/{{Notelist2\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Notelist2|30em}}');
}
</syntaxhighlight>
</syntaxhighlight>

2026年4月25日 (土) 17:10時点における最新版

Wikipediaの記事を標準的なマークアップや表記方法で修正します。

構文ファイルのWikitextと併用すると便利です。

注意事項[編集]

  • このマクロはウィキペディア日本語版の記事での動作を想定しています。他言語版や記事以外のページは動作対象外です。
  • ソースコードをコピーする前にエディターの編集モードが「ソースの編集」になっていることを確認してください。もし、編集モードが「ビジュアル編集」になっている場合は、「ソースの編集」に切り替えてからソースコードをコピーしてください。
  • 記事のソースコードの書き方によっては想定外の修正をしてしまう可能性がありますので、マクロを実行した後は必ずWikipedia上のプレビュー画面と差分画面の両方で問題がないことを確認してから投稿してください。

使用方法[編集]

  1. 修正したい記事の上部にある「編集」または「ソースを編集」ボタンをクリックして、ソースエディター内のソースコードを全選択してコピーした後、Meryにペーストします。
  2. 修正したいソースコードのタブがアクティブになっている状態でマクロを実行します。
  3. 修正したソースコードを全選択してコピーした後、ソースエディター内のソースコードを全選択した状態でペーストして上書きします。
  4. 「プレビューを表示」または「差分を表示」ボタンをクリックして、プレビュー画面または差分画面で修正箇所を確認します。問題がなければ、「編集内容の要約」に編集した内容の要約を記入した後、「変更を公開」ボタンをクリックして修正した記事を投稿します。

出典[編集]

ソースコード[編集]

#title = "Wikipediaマークアップ修正"
#tooltip = "Wikipediaのマークアップや表記を修正します。"

// --------------------------------------------------
// 置換処理の定義
// --------------------------------------------------
// [0] メニュー表示名
// [1] 実行する置換関数
// --------------------------------------------------
var f = [
	["全角空白", fullwidth_space],
	["全角記号", fullwidth_symbols],
	["全角英数", fullwidth_alphanumeric_characters],
	["半角カナ", halfwidth_kana],
	["約物", punctuation_marks],
	["ローマ数字", roman_numerals],
	["丸数字", circled_numbers],
	["空白", space],
	["改行・空行", line_breaks_and_blank_lines],
	["箇条書き", bullet_points],
	["1行改行", single_line_break],
	["表・Infobox", tables_and_infoboxes],
	["タグ", tag],
	["ウィキリンク", wikilinks],
	["リダイレクト", redirect],
	["マジックリンク", magic_links],
	["テンプレート", templates],
	["注釈", notes],
	["出典", references],
	["脚注", footnotes]
];

// ポップアップメニューを作成
var menu = CreatePopupMenu();

// 「すべての置換処理を順番に実行」メニュー
menu.Add("すべて実行", 1, 0);
menu.Add("", 0, meMenuSeparator);

// 個別の置換処理メニュー
for (var i = 0; i < f.length; i++) {
	menu.Add(f[i][0], i + 2, 0);
}

// ポップアップメニューを表示
var n = menu.Track(mePosMouse);

// メニューが選択されなかった場合は終了
if (n == 0) {
	Quit();
}

var sel = document.selection;

// 未選択の場合は全文を対象にする
if (sel.Text == "") {
	sel.SelectAll();
}

// 対象テキストを取得
var s = sel.Text;

// すべての置換処理を実行
if (n == 1) {
	for (var i = 0; i < f.length; i++) {
		s = f[i][1](s);
	}
}
// 選択された置換処理のみ実行
else {
	s = f[n - 2][1](s);
}

// 置換結果を反映
sel.Text = s;

// -------------------------
// 置換処理用関数
// -------------------------

// 全角空白
function fullwidth_space(s) {
	return s
		.replace(/ /g, ' ');
}

// 全角記号
function fullwidth_symbols(s) {
	return s
		.replace(/$/g, '$')
		.replace(/%/g, '%')
		.replace(/&/g, '&')
		.replace(/*/g, '*')
		.replace(/+/g, '+')
		.replace(/,/g, ',')
		.replace(/-/g, '-')
		.replace(/./g, '.')
		.replace(///g, '/')
		.replace(/;/g, ';')
		.replace(/</g, '<')
		.replace(/>/g, '>')
		.replace(/@/g, '@')
		.replace(/¥/g, '\\')
		.replace(/^/g, '^')
		.replace(/_/g, '_')
		.replace(/`/g, '`');
}

// 全角英数
function fullwidth_alphanumeric_characters(s) {
	return s
		.replace(/0/g, '0')
		.replace(/1/g, '1')
		.replace(/2/g, '2')
		.replace(/3/g, '3')
		.replace(/4/g, '4')
		.replace(/5/g, '5')
		.replace(/6/g, '6')
		.replace(/7/g, '7')
		.replace(/8/g, '8')
		.replace(/9/g, '9')
		.replace(/A/g, 'A')
		.replace(/B/g, 'B')
		.replace(/C/g, 'C')
		.replace(/D/g, 'D')
		.replace(/E/g, 'E')
		.replace(/F/g, 'F')
		.replace(/G/g, 'G')
		.replace(/H/g, 'H')
		.replace(/I/g, 'I')
		.replace(/J/g, 'J')
		.replace(/K/g, 'K')
		.replace(/L/g, 'L')
		.replace(/M/g, 'M')
		.replace(/N/g, 'N')
		.replace(/O/g, 'O')
		.replace(/P/g, 'P')
		.replace(/Q/g, 'Q')
		.replace(/R/g, 'R')
		.replace(/S/g, 'S')
		.replace(/T/g, 'T')
		.replace(/U/g, 'U')
		.replace(/V/g, 'V')
		.replace(/W/g, 'W')
		.replace(/X/g, 'X')
		.replace(/Y/g, 'Y')
		.replace(/Z/g, 'Z')
		.replace(/a/g, 'a')
		.replace(/b/g, 'b')
		.replace(/c/g, 'c')
		.replace(/d/g, 'd')
		.replace(/e/g, 'e')
		.replace(/f/g, 'f')
		.replace(/g/g, 'g')
		.replace(/h/g, 'h')
		.replace(/i/g, 'i')
		.replace(/j/g, 'j')
		.replace(/k/g, 'k')
		.replace(/l/g, 'l')
		.replace(/m/g, 'm')
		.replace(/n/g, 'n')
		.replace(/o/g, 'o')
		.replace(/p/g, 'p')
		.replace(/q/g, 'q')
		.replace(/r/g, 'r')
		.replace(/s/g, 's')
		.replace(/t/g, 't')
		.replace(/u/g, 'u')
		.replace(/v/g, 'v')
		.replace(/w/g, 'w')
		.replace(/x/g, 'x')
		.replace(/y/g, 'y')
		.replace(/z/g, 'z');
}

// 半角カナ
function halfwidth_kana(s) {
	return s
		.replace(/。/g, '。')
		.replace(/「/g, '「')
		.replace(/」/g, '」')
		.replace(/、/g, '、')
		.replace(/・/g, '・')
		.replace(/ガ/g, 'ガ')
		.replace(/ギ/g, 'ギ')
		.replace(/グ/g, 'グ')
		.replace(/ゲ/g, 'ゲ')
		.replace(/ゴ/g, 'ゴ')
		.replace(/ザ/g, 'ザ')
		.replace(/ジ/g, 'ジ')
		.replace(/ズ/g, 'ズ')
		.replace(/ゼ/g, 'ゼ')
		.replace(/ゾ/g, 'ゾ')
		.replace(/ダ/g, 'ダ')
		.replace(/ヂ/g, 'ヂ')
		.replace(/ヅ/g, 'ヅ')
		.replace(/デ/g, 'デ')
		.replace(/ド/g, 'ド')
		.replace(/バ/g, 'バ')
		.replace(/ビ/g, 'ビ')
		.replace(/ブ/g, 'ブ')
		.replace(/ベ/g, 'ベ')
		.replace(/ボ/g, 'ボ')
		.replace(/パ/g, 'パ')
		.replace(/ピ/g, 'ピ')
		.replace(/プ/g, 'プ')
		.replace(/ペ/g, 'ペ')
		.replace(/ポ/g, 'ポ')
		.replace(/ヴ/g, 'ヴ')
		.replace(/ヲ/g, 'ヲ')
		.replace(/ァ/g, 'ァ')
		.replace(/ィ/g, 'ィ')
		.replace(/ゥ/g, 'ゥ')
		.replace(/ェ/g, 'ェ')
		.replace(/ォ/g, 'ォ')
		.replace(/ャ/g, 'ャ')
		.replace(/ュ/g, 'ュ')
		.replace(/ョ/g, 'ョ')
		.replace(/ッ/g, 'ッ')
		.replace(/ー/g, 'ー')
		.replace(/ア/g, 'ア')
		.replace(/イ/g, 'イ')
		.replace(/ウ/g, 'ウ')
		.replace(/エ/g, 'エ')
		.replace(/オ/g, 'オ')
		.replace(/カ/g, 'カ')
		.replace(/キ/g, 'キ')
		.replace(/ク/g, 'ク')
		.replace(/ケ/g, 'ケ')
		.replace(/コ/g, 'コ')
		.replace(/サ/g, 'サ')
		.replace(/シ/g, 'シ')
		.replace(/ス/g, 'ス')
		.replace(/セ/g, 'セ')
		.replace(/ソ/g, 'ソ')
		.replace(/タ/g, 'タ')
		.replace(/チ/g, 'チ')
		.replace(/ツ/g, 'ツ')
		.replace(/テ/g, 'テ')
		.replace(/ト/g, 'ト')
		.replace(/ナ/g, 'ナ')
		.replace(/ニ/g, 'ニ')
		.replace(/ヌ/g, 'ヌ')
		.replace(/ネ/g, 'ネ')
		.replace(/ノ/g, 'ノ')
		.replace(/ハ/g, 'ハ')
		.replace(/ヒ/g, 'ヒ')
		.replace(/フ/g, 'フ')
		.replace(/ヘ/g, 'ヘ')
		.replace(/ホ/g, 'ホ')
		.replace(/マ/g, 'マ')
		.replace(/ミ/g, 'ミ')
		.replace(/ム/g, 'ム')
		.replace(/メ/g, 'メ')
		.replace(/モ/g, 'モ')
		.replace(/ヤ/g, 'ヤ')
		.replace(/ユ/g, 'ユ')
		.replace(/ヨ/g, 'ヨ')
		.replace(/ラ/g, 'ラ')
		.replace(/リ/g, 'リ')
		.replace(/ル/g, 'ル')
		.replace(/レ/g, 'レ')
		.replace(/ロ/g, 'ロ')
		.replace(/ワ/g, 'ワ')
		.replace(/ン/g, 'ン')
		.replace(/゙/g, '゛')
		.replace(/゚/g, '゜');
}

// 約物
function punctuation_marks(s) {
	return s
		.replace(/。。。|、、、/g, '…')
		.replace(/・・・/g, '…')
		.replace(/!!/g, '!!')
		.replace(/!?/g, '!?')
		.replace(/?!/g, '?!')
		.replace(/??/g, '??')
		.replace(/([^\/])(~|~)/g, '$1〜') //全角チルダ(U+FF5E)やチルダ(U+007E)を波ダッシュ(U+301C)に変更
		.replace(/‥/g, '…')
		.replace(/〇|◯/g, '○'); //漢数字のゼロ「〇」や大きな丸「◯」を丸「○」に変更
}

// ローマ数字
function roman_numerals(s) {
	return s
		.replace(/Ⅰ/g, 'I')
		.replace(/Ⅱ/g, 'II')
		.replace(/Ⅲ/g, 'III')
		.replace(/Ⅳ/g, 'IV')
		.replace(/Ⅴ/g, 'V')
		.replace(/Ⅵ/g, 'VI')
		.replace(/Ⅶ/g, 'VII')
		.replace(/Ⅷ/g, 'VIII')
		.replace(/Ⅸ/g, 'IX')
		.replace(/Ⅹ/g, 'X')
		.replace(/Ⅺ/g, 'XI')
		.replace(/Ⅻ/g, 'XII')
		.replace(/ⅰ/g, 'i')
		.replace(/ⅱ/g, 'ii')
		.replace(/ⅲ/g, 'iii')
		.replace(/ⅳ/g, 'iv')
		.replace(/ⅴ/g, 'v')
		.replace(/ⅵ/g, 'vi')
		.replace(/ⅶ/g, 'vii')
		.replace(/ⅷ/g, 'viii')
		.replace(/ⅸ/g, 'ix')
		.replace(/ⅹ/g, 'x')
		.replace(/ⅺ/g, 'xi')
		.replace(/ⅻ/g, 'xii');
}

// 丸数字
function circled_numbers(s) {
	return s
		.replace(/①/g, '(1)')
		.replace(/②/g, '(2)')
		.replace(/③/g, '(3)')
		.replace(/④/g, '(4)')
		.replace(/⑤/g, '(5)')
		.replace(/⑥/g, '(6)')
		.replace(/⑦/g, '(7)')
		.replace(/⑧/g, '(8)')
		.replace(/⑨/g, '(9)')
		.replace(/⑩/g, '(10)')
		.replace(/⑪/g, '(11)')
		.replace(/⑫/g, '(12)')
		.replace(/⑬/g, '(13)')
		.replace(/⑭/g, '(14)')
		.replace(/⑮/g, '(15)')
		.replace(/⑯/g, '(16)')
		.replace(/⑰/g, '(17)')
		.replace(/⑱/g, '(18)')
		.replace(/⑲/g, '(19)')
		.replace(/⑳/g, '(20)')
		.replace(/㉑/g, '(21)')
		.replace(/㉒/g, '(22)')
		.replace(/㉓/g, '(23)')
		.replace(/㉔/g, '(24)')
		.replace(/㉕/g, '(25)')
		.replace(/㉖/g, '(26)')
		.replace(/㉗/g, '(27)')
		.replace(/㉘/g, '(28)')
		.replace(/㉙/g, '(29)')
		.replace(/㉚/g, '(30)')
		.replace(/㉛/g, '(31)')
		.replace(/㉜/g, '(32)')
		.replace(/㉝/g, '(33)')
		.replace(/㉞/g, '(34)')
		.replace(/㉟/g, '(35)')
		.replace(/㊱/g, '(36)')
		.replace(/㊲/g, '(37)')
		.replace(/㊳/g, '(38)')
		.replace(/㊴/g, '(39)')
		.replace(/㊵/g, '(40)')
		.replace(/㊶/g, '(41)')
		.replace(/㊷/g, '(42)')
		.replace(/㊸/g, '(43)')
		.replace(/㊹/g, '(44)')
		.replace(/㊺/g, '(45)')
		.replace(/㊻/g, '(46)')
		.replace(/㊼/g, '(47)')
		.replace(/㊽/g, '(48)')
		.replace(/㊾/g, '(49)')
		.replace(/㊿/g, '(50)');
}

// 空白
function space(s) {
	return s
		.replace(/ {2,}/g, ' ') //連続する空白を除去
		.replace(/([^=\-\|]) $/gm, '$1') //行末の空白を除去
		.replace(/ 。/g, '。') //句点の前の空白を除去
		.replace(/([^\-]) 、/g, '$1、') //読点の前の空白を除去
		.replace(/。 ([^#\-\|].*?)。/g, '。$1。') //句点の後の空白を除去(1周目)
		.replace(/。 ([^#\-\|].*?)。/g, '。$1。') //句点の後の空白を除去(2周目)
		.replace(/、 ([^\-].*?)、/g, '、$1、') //読点の後の空白を除去(1周目)
		.replace(/、 ([^\-].*?)、/g, '、$1、') //読点の後の空白を除去(2周目)
		.replace(/、 ([^\-].*?)。/g, '、$1。') //読点の後の空白を除去
		.replace(/(==+)( ?)(.*?)( ?)(==+)/g, '$1 $3 $5'); //見出しに空白を追加
}

// 改行・空行
function line_breaks_and_blank_lines(s) {
	return s
		.replace(/\n{3,}/g, '\n\n') //2行以上の空行をトルツメ
		.replace(/==\n\n/g, '==\n') //見出しの後の空行をトルツメ
		.replace(/([^=\n])\n==/g, '$1\n\n==') //見出しの前に空行を挿入
		.replace(/\n\n(===+) 注釈 (===+)/g, '\n$1 注釈 $2') //レベル3以降の注釈見出しの前の空行をトルツメ
		.replace(/\n\n(===+) 出典 (===+)/g, '\n$1 出典 $2') //レベル3以降の出典見出しの前の空行をトルツメ
		.replace(/\[\[File:/g, '[[ファイル:') //[[ファイル:に変更
		.replace(/([^\n =\|>])\[\[ファイル:/g, '$1\n[[ファイル:'); //[[ファイル:の前に改行を追加
}

// 箇条書き
function bullet_points(s) {
	return s
		.replace(/^(\*+|#+|:+\*|:+#)([^ \*#:;].*?)/gm, '$1 $2') //箇条書きのあとに空白を追加
		.replace(/^(;|:+;)([^ ].*?)/gm, '$1 $2') //定義の箇条書き(;)のあとに空白を追加
		.replace(/^(:+)([^ \*#:;<\n].*?)/gm, '$1 $2') //定義の箇条書き(:)のあとに空白を追加
		.replace(/^([^=\*#:;].*?。)\n(\*|#|;|:)/gm, '$1\n\n$2') //文章と箇条書きの間に空行を挿入
		.replace(/^(\*|#|;|:)(.*?)\n([^\n=\*#:;].*?。)/gm, '$1$2\n\n$3') //箇条書きと文章の間に空行を挿入
		.replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目)
		.replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(2周目)
		.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目)
		.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'); //箇条書きと箇条書きの間の空行をトルツメ(2周目)
}

// 1行改行
function single_line_break(s) {
	return s
		.replace(/。\n([^\n\*#;:<\|].*?)。/g, '。$1。') //句点の後の1行改行をトルツメ(1周目)
		.replace(/。\n([^\n\*#;:<\|].*?)。/g, '。$1。') //句点の後の1行改行をトルツメ(2周目)
		.replace(/、\n([^\n\*#;:].*?)/g, '、$1') //読点の後の1行改行をトルツメ(1周目)
		.replace(/、\n([^\n\*#;:].*?)/g, '、$1') //読点の後の1行改行をトルツメ(2周目)
		.replace(/<br \/>\n([^\n\*#;:].*?)/g, '<br />$1') //改行タグの後の1行改行をトルツメ(1周目)
		.replace(/<br \/>\n([^\n\*#;:].*?)/g, '<br />$1'); //改行タグの後の1行改行をトルツメ(2周目)
}

// 表・Infobox
function tables_and_infoboxes(s) {
	return s
		.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(1周目)
		.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(2周目)
		.replace(/^!(.*?)\n\n!/gm, '!$1\n!') //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(1周目)
		.replace(/^!(.*?)\n\n!/gm, '!$1\n!'); //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(2周目)
}

// タグ
function tag(s) {
	return s
		.replace(/<br( ?)>|<br\/>/g, '<br />');
}

// ウィキリンク
function wikilinks(s) {
	return s
		.replace(/\[\[(カテゴリ|category):/g, '[[Category:');
}

// リダイレクト
function redirect(s) {
	return s
		.replace(/# REDIRECT/g, '#REDIRECT')
		.replace(/# redirect/g, '#redirect')
		.replace(/# 転送/g, '#転送')
		.replace(/#redirect|#転送/g, '#REDIRECT')
		.replace(/#REDIRECT( ?)\[\[/g, '#REDIRECT [[');
}

// マジックリンク
function magic_links(s) {
	return s
		.replace(/ISBN ([\d\-X]{10,17})/g, '{{ISBN|$1}}')
		.replace(/PMID ([\d]{1,8})/g, '{{PMID|$1}}')
		.replace(/RFC ([\d]{1,4})/g, '{{IETF RFC|$1}}');
}

// テンプレート
function templates(s) {
	return s
		.replace(/{{a/g, '{{A')
		.replace(/{{b/g, '{{B')
		.replace(/{{c/g, '{{C')
		.replace(/{{d/g, '{{D')
		.replace(/{{e/g, '{{E')
		.replace(/{{f/g, '{{F')
		.replace(/{{g/g, '{{G')
		.replace(/{{h/g, '{{H')
		.replace(/{{i/g, '{{I')
		.replace(/{{j/g, '{{J')
		.replace(/{{k/g, '{{K')
		.replace(/{{l/g, '{{L')
		.replace(/{{m/g, '{{M')
		.replace(/{{n/g, '{{N')
		.replace(/{{o/g, '{{O')
		.replace(/{{p/g, '{{P')
		.replace(/{{q/g, '{{Q')
		.replace(/{{r/g, '{{R')
		.replace(/{{s/g, '{{S')
		.replace(/{{t/g, '{{T')
		.replace(/{{u/g, '{{U')
		.replace(/{{v/g, '{{V')
		.replace(/{{w/g, '{{W')
		.replace(/{{x/g, '{{X')
		.replace(/{{y/g, '{{Y')
		.replace(/{{z/g, '{{Z')
		.replace(/{{Tl\|a/g, '{{Tl|A')
		.replace(/{{Tl\|b/g, '{{Tl|B')
		.replace(/{{Tl\|c/g, '{{Tl|C')
		.replace(/{{Tl\|d/g, '{{Tl|D')
		.replace(/{{Tl\|e/g, '{{Tl|E')
		.replace(/{{Tl\|f/g, '{{Tl|F')
		.replace(/{{Tl\|g/g, '{{Tl|G')
		.replace(/{{Tl\|h/g, '{{Tl|H')
		.replace(/{{Tl\|i/g, '{{Tl|I')
		.replace(/{{Tl\|j/g, '{{Tl|J')
		.replace(/{{Tl\|k/g, '{{Tl|K')
		.replace(/{{Tl\|l/g, '{{Tl|L')
		.replace(/{{Tl\|m/g, '{{Tl|M')
		.replace(/{{Tl\|n/g, '{{Tl|N')
		.replace(/{{Tl\|o/g, '{{Tl|O')
		.replace(/{{Tl\|p/g, '{{Tl|P')
		.replace(/{{Tl\|q/g, '{{Tl|Q')
		.replace(/{{Tl\|r/g, '{{Tl|R')
		.replace(/{{Tl\|s/g, '{{Tl|S')
		.replace(/{{Tl\|t/g, '{{Tl|T')
		.replace(/{{Tl\|u/g, '{{Tl|U')
		.replace(/{{Tl\|v/g, '{{Tl|V')
		.replace(/{{Tl\|w/g, '{{Tl|W')
		.replace(/{{Tl\|x/g, '{{Tl|X')
		.replace(/{{Tl\|y/g, '{{Tl|Y')
		.replace(/{{Tl\|z/g, '{{Tl|Z')
		.replace(/{{デフォルトソート:/g, '{{DEFAULTSORT:');
}

// 注釈
function notes(s) {
	return s
		.replace(/group( ?)=( ?)("?)(注釈|注|†|※|\*)("?)/g, 'group="注"') //group="注"に変更
		.replace(/{{#tag:ref/g, '{{Refnest') //{{Refnestに変更
		.replace(/([^\n]){{Refnest\|/g, '$1\n{{Refnest|') //{{Refnest|の前に改行を追加
		.replace(/{{Refnest\|(.*?)\|group="注"\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Refnest|$1|group="注"|name="$4"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)\|group="注"}}/g, '{{Refnest|$1|name="$4"|group="注"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|group="注"\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Refnest|group="注"|$1|name="$4"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|name( ?)=( ?)([^"].*?)( ?)\|(.*?)\|group="注"}}/g, '{{Refnest|name="$3"|$5|group="注"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|group="注"( ?)\|name( ?)=( ?)([^"].*?)( ?)\|/g, '{{Refnest|group="注"|name="$4"|') //name引数に二重引用符を追加
		.replace(/{{Refnest\|name( ?)=( ?)([^"].*?)( ?)\|group="注"( ?)\|/g, '{{Refnest|name="$3"|group="注"|') //name引数に二重引用符を追加
		.replace(/{{Refnest\|(.*?)\|group="注"\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|(.*?)\|name=(.*?)\|group="注"}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|group="注"\|(.*?)\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|name=(.*?)\|(.*?)\|group="注"}}/g, '{{Efn2|name=$1|$2}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|group="注"\|name=(.*?)\|/g, '{{Efn2|name=$1|') //{{Efn2|name="○○"|に変更
		.replace(/{{Refnest\|name=(.*?)\|group="注"\|/g, '{{Efn2|name=$1|') //{{Efn2|name="○○"|に変更
		.replace(/{{Refnest\|(.*?)\|group="注"}}/g, '{{Efn2|$1}}') //{{Efn2|○○}}に変更
		.replace(/{{Refnest\|group="注"( ?)\|/g, '{{Efn2|') //{{Efn2|に変更
		.replace(/{{Refnest/g, '{{Efn2') //{{Efn2に変更
		.replace(/{{Efn\|/g, '{{Efn2|') //{{Efn2|に変更
		.replace(/([^\n]){{Efn2\|/g, '$1\n{{Efn2|') //{{Efn2|の前に改行を追加
		.replace(/{{Efn2\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Efn2|$1|name="$4"}}') //name引数に二重引用符を追加
		.replace(/{{Efn2\|name( ?)=( ?)([^"].*?)( ?)(\||})/g, '{{Efn2|name="$3"$5') //name引数に二重引用符を追加
		.replace(/{{Efn2\|(.*?)\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/([^\n])<ref([>| ])/g, '$1\n<ref$2') //<ref>の前に改行を追加
		.replace(/<ref group="注" name( ?)=( ?)([^"].*?)( ?)>(.*?)<\/ref>/g, '<ref group="注" name="$3">$5</ref>') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)([^"].*?) group="注">(.*?)<\/ref>/g, '<ref name="$3" group="注">$4</ref>') //name引数に二重引用符を追加
		.replace(/<ref group="注" name( ?)=( ?)([^"].*?)( ?)\/>/g, '<ref group="注" name="$3" />') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)([^"].*?) group="注"( ?)\/>/g, '<ref name="$3" group="注" />') //name引数に二重引用符を追加
		.replace(/<ref group="注"( ?)name=(".*?")>(.*?)<\/ref>/g, '{{Efn2|name=$2|$3}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/<ref name=(".*?")( ?)group="注">(.*?)<\/ref>/g, '{{Efn2|name=$1|$3}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/<ref group="注"( ?)name( ?)=( ?)(".*?")( ?)\/>/g, '{{Efn2|name=$4}}') //{{Efn2|name="○○"}}に変更
		.replace(/<ref name( ?)=( ?)(".*?")( ?)group="注"( ?)\/>/g, '{{Efn2|name=$3}}') //{{Efn2|name="○○"}}に変更
		.replace(/<ref group="注"( ?)>(.*?)<\/ref>/g, '{{Efn2|$2}}') //{{Efn2|○○}}に変更
		.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去
		.replace(/([^\n])\n{{Efn2\|/g, '$1{{Efn2|'); //{{Efn2|の前の改行を除去
}

// 出典
function references(s) {
	return s
		.replace(/([^\n])<ref([>| ])/g, '$1\n<ref$2') //<ref>の前に改行を追加
		.replace(/<ref name( ?)=( ?)([^"].*?)( ?)>(.*?)<\/ref>/g, '<ref name="$3">$5</ref>') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)([^"].*?)( ?)\/>/g, '<ref name="$3" />') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)"(.*?)"( ?)\/>/g, '{{R|$3}}') //{{R|○○}}に変更
		.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去
		.replace(/([^\n])\n{{R\|/g, '$1{{R|'); //{{R|の前の改行を除去
}

// 脚注
function footnotes(s) {
	return s
		.replace(/<references( ?)\/>/g, '{{Reflist}}')
		.replace(/<references group="注"( ?)\/>/g, '{{Notelist2}}')
		.replace(/{{Reflist\|\|group="注"}}/g, '{{Reflist|group="注"|}}')
		.replace(/{{Reflist\|([0-9])\|group="注"}}/g, '{{Reflist|group="注"|$1}}')
		.replace(/{{Reflist\|colwidth=/g, '{{Reflist|')
		.replace(/{{Reflist\|em\|group="注"}}/g, '{{Reflist|group="注"|em}}')
		.replace(/{{Reflist\|([0-9]|[1-9][0-9])em\|group="注"}}/g, '{{Reflist|group="注"|$1em}}')
		.replace(/{{Reflist\|group="注"}}/g, '{{Notelist2}}')
		.replace(/{{Reflist\|group="注"\|/g, '{{Notelist2|')
		.replace(/{{Notelist}}/g, '{{Notelist2}}')
		.replace(/{{Notelist\|/g, '{{Notelist2|')
		.replace(/list\|colwidth=/g, 'list|')
		.replace(/list2\|colwidth=/g, 'list2|')
		.replace(/{{Reflist\|}}/g, '{{Reflist}}')
		.replace(/{{Reflist\|[0-1]}}/g, '{{Reflist}}')
		.replace(/{{Reflist\|2}}/g, '{{Reflist|30em}}')
		.replace(/{{Reflist\|[3-9]}}/g, '{{Reflist|20em}}')
		.replace(/{{Notelist2\|}}/g, '{{Notelist2}}')
		.replace(/{{Notelist2\|[0-1]}}/g, '{{Notelist2}}')
		.replace(/{{Notelist2\|2}}/g, '{{Notelist2|30em}}')
		.replace(/{{Notelist2\|[3-9]}}/g, '{{Notelist2|20em}}')
		.replace(/{{Reflist\|em}}/g, '{{Reflist}}')
		.replace(/{{Reflist\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Reflist|20em}}')
		.replace(/{{Reflist\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Reflist|30em}}')
		.replace(/{{Notelist2\|em}}/g, '{{Notelist2}}')
		.replace(/{{Notelist2\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Notelist2|20em}}')
		.replace(/{{Notelist2\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Notelist2|30em}}');
}
スポンサーリンク