「
テキスト整形
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
== 拡張コード == ★印の項目は、スターターパックに収録されているコマンドです。 === 小説/作文 === ;★地の文の行頭を字下げ :開き括弧類 <code>‘ “ ( 〔 [ { 〈 《 「 『 【</code> または 半角空白/全角空白/水平タブ/改行 <b style="color:#c00;">以外</b>の文字で始まる行を「地の文」とみなし、行頭に全角空白を挿入します。 <syntaxhighlight lang="javascript" copy> f.push(["地の文の行頭を字下げ","L",function(_){ //2015-02-14 return _.replace(/^([^‘“(〔[{〈《「『【 \t\n])/gm," $1") }]); </syntaxhighlight> ;★括弧前の句読点を除去 :閉じ括弧類 <code>’ ” ) 〕 ] } 〉 》 」 』 】</code> の直前に句読点 <code>、 。 , .</code> がある場合、除去します。 <syntaxhighlight lang="javascript" copy> f.push(["括弧前の句読点を除去","s",function(_){ //2014-03-01 return _.replace(/[、。,.](?=[’”)〕]}〉》」』】])/g,"") }]); </syntaxhighlight> ;★!?を半角/全角に整形 :感嘆符・疑問符を、直前の文字が半角なら半角に、全角なら全角に整形します。 :直前の文字がない場合(範囲先頭か行頭)は何もしません。 :※<b style="color:#c00;">半角文字</b>=ASCII文字+半角カナ、<b style="color:#c00;">全角文字</b>=それ以外の文字、を意味しています。 :例> <span style="background:#bfdfff;">Wha<b style="color:#c00;">t</b>!?/あ<b style="color:#c00;">れ</b>!?</span> → What!?/あれ!?(※<b style="color:#c00;">赤字</b>が直前の文字) <syntaxhighlight lang="javascript" copy> f.push(["!?を半角/全角に整形","s",function(_){ //2017-06-25 return _.replace(/[!?!?]+/g,function(s,i,c){c=c.charAt(i-1); return (!c||c==="\n")? s: /[ -~。-゚]/.test(c)? s.replace(/!/g,"!").replace(/?/g,"?"): s.replace(/\!/g,"!").replace(/\?/g,"?")}) }]); </syntaxhighlight> ;★連続する!?を整形 :2文字以上連続する感嘆符・疑問符を半角2文字に整形します。 :例> <span style="background:#bfdfff;">!!/!!?/?!!!/?!!!?</span> → !!/!?/?!/?? <syntaxhighlight lang="javascript" copy> f.push(["連続する!?を整形","s",function(_){ //2015-03-14 return _.replaceBatch([ [/[!!][!?!?]*[!!]/g,"!!"],[/[!!][!?!?]*[??]/g,"!?"],[/[??][!?!?]*[!!]/g,"?!"],[/[??][!?!?]*[??]/g,"??"] ]) }]); </syntaxhighlight> ;★三点リーダー(……)に整形 :1~3文字以上連続する中黒・句点・読点などを、三点リーダー2文字 …… に整形します。 :例> <span style="background:#bfdfff;">そんな・・・・。</span> → そんな……。 :※変換対象となるのは以下の8パターンです。 :{|class="wikitable" style="text-align:center;" ! 名称 !! 連続字数 !! 例 !! Shift_JIS !! Unicode |- | 全角読点 ||rowspan="6"| 3字以上 || 、、、 || 0x8141 || U+3001 |- | 全角句点 || 。。。 || 0x8142 || U+3002 |- | 全角コンマ || ,,, || 0x8143 || U+FF0C |- | 全角ピリオド || ... || 0x8144 || U+FF0E |- | 全角中黒 || ・・・ || 0x8145 || U+30FB |- | 半角中黒 || ・・・ || 0xA5 || U+FF65 |- | 三点リーダー ||rowspan="2"| 1字以上 || … || 0x8163 || U+2026 |- | 二点リーダー || ‥ || 0x8164 || U+2025 |} <syntaxhighlight lang="javascript" copy> f.push(["三点リーダー(……)に整形","s",function(_){ //2014-03-01 return _.replace(/、{3,}|。{3,}|,{3,}|.{3,}|・{3,}|・{3,}|…{1,}|‥{1,}/g,"……") }]); </syntaxhighlight> ;★全角ダッシュ(――)に整形 :2文字以上連続する長音などを、全角ダッシュ2文字 ―― に整形します。 :例> <span style="background:#bfdfff;">そんなーーー。</span> → そんな――。 :※変換対象となるのは以下の4パターンです。 :{|class="wikitable" style="text-align:center;" ! 名称 !! 連続字数 !! 例 !! Shift_JIS !! Unicode |- | 全角長音符 ||rowspan="5"| 2字以上 || ーー || 0x815B || U+30FC |- | em ダッシュ<br>(全角ダッシュ) || —— || - || U+2014 |- | 全角ダッシュ<br>(水平線) || ―― || 0x815C || U+2015 |- | 全角マイナス || -- || 0x817C || U+FF0D |} <syntaxhighlight lang="javascript" copy> f.push(["全角ダッシュ(――)に整形","s",function(_){ //2017-06-25 return _.replace(/ー{2,}|\u2014{2,}|―{2,}|-{2,}/g,"――") }]); </syntaxhighlight> ;青空文庫 ルビを除去 :<code>《</code> で始まり <code>》</code> で終わる箇所を除去します。ルビ開始位置を表す <code>|</code> がある場合、<code>|</code> も除去します。 :例> <span style="background:#bfdfff;">一応《いちおう》何時《いつ》もの/霧の|ロンドン警視庁《スコットランドヤード》</span> → 一応何時もの/霧のロンドン警視庁 <syntaxhighlight lang="javascript" copy> f.push(["青空文庫 ルビを除去","s",function(_){ //2015-09-30 return _.replace(/(?:|([^《\n]+))?《.*?》/g,"$1") }]); </syntaxhighlight> ;青空文庫 注記を除去 :<code>[#</code> で始まり <code>]</code> で終わる箇所を除去します。 :例> <span style="background:#bfdfff;">[#注記付き]名※[#二の字点、1-2-22][#「(銘々)」の注記付き終わり]</span> → 名※ <syntaxhighlight lang="javascript" copy> f.push(["青空文庫 注記を除去","s",function(_){ //2014-03-14 return _.replace(/[#.*?]/g,"") }]); </syntaxhighlight> ;青空文庫 注記(外字以外)を除去 :外字を表す注記 <code>※[# ~ ]</code> は例外とし、除去しません。 :例> <span style="background:#bfdfff;">[#注記付き]名※[#二の字点、1-2-22][#「(銘々)」の注記付き終わり]</span> → 名※[#二の字点、1-2-22] <syntaxhighlight lang="javascript" copy> f.push(["青空文庫 注記(外字以外)を除去","s",function(_){ //2014-03-14 return _.replace(/(※[#.*?])|[#.*?]/g,"$1") }]); </syntaxhighlight> === Web/HTML === ;★HTMLタグを除去 <syntaxhighlight lang="javascript" copy> f.push(["HTMLタグを除去","s",function(_){ //2015-09-30 return _.replace(/<("[^"]*"|'[^']*'|[^"'>])*>/g,"") }]); </syntaxhighlight> ;行末に<br>を挿入 <syntaxhighlight lang="javascript" copy> f.push(["行末に<br>を挿入","L",function(_){ //2015-02-14 return _.replace(/$/gm,"<br>") }]); </syntaxhighlight> ;<br>を改行に変換 :改行タグを改行に変換します。ただし、改行タグ直後に改行が含まれている場合は、二重改行にならないようタグのみ削除します。 :※対応タグは <code><br> <br/> <br /></code> の3種類です。英字の大小は問いません。 :<b style="color:#c00;">※属性付きには対応していません。</b>例> <code><br clear="all"></code> など <syntaxhighlight lang="javascript" copy> f.push(["<br>を改行に変換","s",function(_){ //2015-02-14 return _.replace(/<br( ?\/)?>\n?/gi,"\n") }]); </syntaxhighlight> ;★実体参照 &"<> → &xxx; ;★実体参照 &xxx; → ␣><"& :HTML で使用される文字実体参照の変換を行います。 :{|class="wikitable" ! 文字 !! 実体参照 !! 備考 |- |align="center"| < || &lt; || 小なり不等号 (less-than sign) |- |align="center"| > || &gt; || 大なり不等号 (greater-than sign) |- |align="center"| " || &quot; || 引用符 (quotation mark) |- |align="center"| & || &amp; || アンド (ampersand) |- |align="center"| || &nbsp; || 折り返し禁止空白 (no-break space) |} :&nbsp; は U+00A0 (No-Break Space) ではなく、U+0020 (半角空白) に変換します。 :空白文字 → &nbsp; の変換は、実用上不都合が多いため行いません。 <syntaxhighlight lang="javascript" copy> f.push(['実体参照 &&"<> → &&xxx;',"s",function(_){ //2015-03-14 return _.replaceBatch([ ["&","&amp;"],['"',"&quot;"],["<","&lt;"],[">","&gt;"] ]) }]); f.push(['実体参照 &&xxx; → \u2423><"&&',"s",function(_){ //2015-03-14 return _.replaceBatch([ ["&nbsp;"," "],["&gt;",">"],["&lt;","<"],["&quot;",'"'],["&amp;","&"] ]) }]); </syntaxhighlight> :半角空白 → &nbsp; の変換も行う場合は、下記の内容に差し替えてください。 <syntaxhighlight lang="javascript" copy> f.push(['実体参照 &&"<>\u2423 → &&xxx;',"s",function(_){ //2015-03-14 return _.replaceBatch([ ["&","&amp;"],['"',"&quot;"],["<","&lt;"],[">","&gt;"],[" ","&nbsp;"] ]) }]); </syntaxhighlight> ;★数値参照 &#dec; に変換 :文字列を数値文字参照(10進)形式に変換します。(dec=decimal/十進法) :例> <span style="background:#bfdfff;">Aわ𩸽</span> → &#65;&#12431;&#171581; :→ <b>[[#符号化/復号化]]</b> の節の <b>&#dec; エンコード</b> を参照 ;★数値参照 &#xHEX; に変換 :文字列を数値文字参照(16進)形式に変換します。(HEX=hexadecimal/十六進法) :例> <span style="background:#bfdfff;">Aわ𩸽</span> → &#x41;&#x308F;&#x29E3D; :→ <b>[[#符号化/復号化]]</b> の節の <b>&#xHEX; エンコード</b> を参照 ;★数値参照を文字に変換 :数値文字参照(10進/16進)を文字列に変換します。 :例> <span style="background:#bfdfff;">&#65;&#x308F;&#x29e3d;</span> → Aわ𩸽 <syntaxhighlight lang="javascript" copy> f.push(["数値参照を文字に変換","s",function(_){ //2019-06-01 return _.replace(/&#(?:([0-9]{1,7})|x([0-9a-f]{1,6}));/gi,function(s,d,x){var n=Number(d||"0x"+x); return (n<=0xFFFF)?String.fromCharCode(n): (n<=0x10FFFF)?String.fromCharCode(n-0x10000>>10|0xD800,n&0x3FF|0xDC00): s}) }]); </syntaxhighlight> === マクロ/コード === ;★行頭 // を挿入/削除 :行頭に // が無い行なら // を挿入し、有る行なら // を削除します。 :※このコマンドをよく利用される場合は「<b>[[コメントマーク付け外し]]</b>」マクロの導入をオススメします。 <syntaxhighlight lang="javascript" copy> f.push(["行頭 \/\/ を挿入/削除","L",function(_){ //2015-03-14 return _.replace(/^(\/\/)?/gm,function(s){return s? "": "\/\/"}) }]); </syntaxhighlight> ;★このマクロを編集 :実行中のマクロ(テキスト整形)を Mery で開きます。 :※マクロを実行後、[マクロ]→[編集] でファイルを開くのと同様です。 <syntaxhighlight lang="javascript" copy> f.push(["このマクロを編集","",function(){ //2019-06-01 Editor.OpenFile(ScriptFullName, meEncodingNone, meOpenAllowNewWindow) }]); </syntaxhighlight> ;マクロフォルダを開く :エクスプローラを起動し、実行中のマクロ(テキスト整形)があるフォルダを開きます。 <syntaxhighlight lang="javascript" copy> f.push(["マクロフォルダを開く","",function(){ //2015-12-26 new ActiveXObject("Shell.Application").Explore(new ActiveXObject("Scripting.FileSystemObject").GetParentFolderName(ScriptFullName)) }]); </syntaxhighlight> ;挿入 Confirm(|) :文字列 <code>if(!Confirm(</code> <code>))Quit();</code> を挿入します。 <syntaxhighlight lang="javascript" copy> f.push(["挿入 Confirm(|)","",function(_){ //2019-06-01 return ["if(!Confirm(" , _ , "))Quit();"] }]); </syntaxhighlight> ;選択範囲を eval で評価 :ステータスバーに eval(<i>選択範囲</i>) の結果を表示します。 :たとえば、選択範囲が <code style="background:#bfdfff;">10*(5+20)</code> なら、250 と表示されます。 <syntaxhighlight lang="javascript" copy> f.push(["選択範囲を eval で評価","s",function(_){ //2019-06-01 Status=eval(_) }]); </syntaxhighlight> === 挿入/貼付 === ;★半角/全角の間を空ける ;★半角英数/全角の間を空ける :半角文字/半角英数と全角文字の間に半角空白を挿入します。 :※<b style="color:#c00;">半角文字</b>=ASCII文字+半角カナ、<b style="color:#c00;">全角文字</b>=それ以外の文字、を意味しています。 <syntaxhighlight lang="javascript" copy> f.push(["半角/全角の間を空ける","s",function(_){ //2014-02-16 return _.replace(/([!-~。-゚](?=[^!-~。-゚ \t\n])|[^!-~。-゚ \t\n](?=[!-~。-゚]))/g,"$1 ") }]); f.push(["半角英数/全角の間を空ける","s",function(_){ //2014-02-16 return _.replace(/([0-9A-Za-z](?=[^!-~。-゚ \t\n])|[^!-~。-゚ \t\n](?=[0-9A-Za-z]))/g,"$1 ") }]); </syntaxhighlight> ;★数値を3桁,区切りに :半角数字列を3桁毎にコンマで区切ります。小数点以下(ピリオド以降)は区切りません。 :例> <span style="background:#bfdfff;">87654321/0.12345/54321.12345</span> → 87,654,321/0.12345/54,321.12345 <syntaxhighlight lang="javascript" copy> f.push(["数値を3桁,区切りに","s",function(_){ //2014-10-12 return _.replace(/([^.0-9]|^)([0-9]+)/g,function(_,p,n){return p+n.replace(/([0-9])(?=(?:[0-9]{3})+$)/g,"$1,")}) }]); </syntaxhighlight> ;複製貼り付け... :クリップボードの文字列を、入力した回数分複製してから貼り付けます。 <syntaxhighlight lang="javascript" copy> f.push(["複製貼り付け...","c",function(){ //2019-06-01 var r=[],c=ClipboardData.GetData(),n=parseInt(Prompt("複製回数: ※半角数字","")); if(n>0){ while(n--){r.push(c)} return r.join("") } }]); </syntaxhighlight> ;★行頭/行末に貼り付け :クリップボードの文字列を、各行の行頭/行末に貼り付けます。 <syntaxhighlight lang="javascript" copy> f.push(["行頭に貼り付け","L c",function(_){ //2015-09-30 var c=ClipboardData.GetData().replace(/(\r\n|[\r\n])$/,""); return _.replace(/^/gm,c) }]); f.push(["行末に貼り付け","L c",function(_){ //2015-09-30 var c=ClipboardData.GetData().replace(/(\r\n|[\r\n])$/,""); return _.replace(/$/gm,c) }]); </syntaxhighlight> ;★行頭/行末に挿入... :入力した文字列を、各行の行頭/行末に挿入します。 <syntaxhighlight lang="javascript" copy> f.push(["行頭に挿入...","L",function(_){ //2019-06-01 var p=Prompt("行頭に挿入する文字列:",""); if(p)return _.replace(/^/gm,p) }]); f.push(["行末に挿入...","L",function(_){ //2019-06-01 var p=Prompt("行末に挿入する文字列:",""); if(p)return _.replace(/$/gm,p) }]); </syntaxhighlight> ;各行先頭/末尾に挿入... :下記の条件で置換を行い、入力した文字列を各行の先頭/末尾に挿入します。 :<b style="color:#c00;">※矩形対応には Mery 2.1.0 以降が必要です。</b> :<b style="color:#c00;">※Mery の仕様上、ゼロ幅には対応していません。</b>ゼロ幅で実行すると、<b>表示行頭</b>に文字列が挿入されます。 :{|class="wikitable" ! 検索文字列 (先頭) | <code>^(?=.|\n)</code> |- ! 検索文字列 (末尾) | <code>(?<=.)$|^(?=\n)</code> |- ! 置換文字列 | ※入力した文字列 |- ! フラグ | 正規表現を使用する (meFindReplaceRegExp)<br>選択した範囲のみ (meReplaceSelOnly)<br>すべて置換 (meReplaceAll) |} <syntaxhighlight lang="javascript" copy> f.push(["各行先頭に挿入...","",function(_,$){ //2019-06-01 var p=Prompt("各行先頭に挿入する文字列:",""); if(p)$.Replace("^(?=.|\\n)", p, meFindReplaceRegExp+meReplaceSelOnly+meReplaceAll) }]); f.push(["各行末尾に挿入...","",function(_,$){ //2019-06-01 var p=Prompt("各行末尾に挿入する文字列:",""); if(p)$.Replace("(?<=.)$|^(?=\\n)", p, meFindReplaceRegExp+meReplaceSelOnly+meReplaceAll) }]); </syntaxhighlight> ;行頭に連番挿入 (#) :行頭に連番 (1), (2), (3) … を挿入します。 <syntaxhighlight lang="javascript" copy> f.push(["行頭に連番挿入 (#)","L",function(_){ //2015-09-30 var re=/^/gm, n=1, pf="(", sf=")"; return _.replace(re,function(){return pf+(n++)+sf}) }]); </syntaxhighlight> ;行頭に連番挿入 (#/Z) :選択行数を Z として、連番 (1/Z), (2/Z), (3/Z) … を挿入します。 <syntaxhighlight lang="javascript" copy> f.push(["行頭に連番挿入 (#/Z)","L",function(_){ //2015-09-30 var re=/^/gm, n=1, m=(_.match(re)||[]).length, pf="(", sf="/"+m+")"; return _.replace(re,function(){return pf+(n++)+sf}) }]); </syntaxhighlight> ;行頭に連番挿入 (0#) :連番が2桁以上になる場合、桁揃えした連番 (01), (02), (03) … を挿入します。 <syntaxhighlight lang="javascript" copy> f.push(["行頭に連番挿入 (0#)","L",function(_){ //2015-09-30 var re=/^/gm, n=1, m=(_.match(re)||[]).length, pf="(", sf=")", sp="0", k=String(m).length, sp=new Array(k).join(sp); return _.replace(re,function(){return pf+(sp+(n++)).slice(-k)+sf}) }]); </syntaxhighlight> ;※行頭に連番挿入系コマンドの比較 :{|class="wikitable" ! 例文 !! (#) !! (#/Z) !! (0#) |- | 1行目<br>2行目<br>…<br>9行目<br>10行目<br>11行目<br>…<br>99行目<br>100行目 | (1)1行目<br>(2)2行目<br>…<br>(9)9行目<br>(10)10行目<br>(11)11行目<br>…<br>(99)99行目<br>(100)100行目 | (1/100)1行目<br>(2/100)2行目<br>…<br>(9/100)9行目<br>(10/100)10行目<br>(11/100)11行目<br>…<br>(99/100)99行目<br>(100/100)100行目 | (001)1行目<br>(002)2行目<br>…<br>(009)9行目<br>(010)10行目<br>(011)11行目<br>…<br>(099)99行目<br>(100)100行目 |} ;連番を出力... :<code><i>数値</i>..<i>数値</i></code>を含む文字列(数値は 0 以上の整数)を入力すると、連番に展開して書き出します。 :{|class="wikitable" ! 例 | <code>8..10</code> | <code>10..8</code> | <code>第01..3章</code> | <code>第1..003章</code> | <code>1..3..9</code> |- ! 結果 | 8<br>9<br>10 | 10<br>9<br>8 | 第01章<br>第02章<br>第03章 | 第001章<br>第002章<br>第003章 | 1..9<br>2..9<br>3..9 |- ! 補足 | | 降順可 |colspan="2"| ゼロ始まりならゼロ埋め | 最初のみ展開 |} <syntaxhighlight lang="javascript" copy> f.push(["連番を出力...","",function(_){ //2019-06-01 var p=Prompt("連番を出力: ※例> 第1..10章",_.match(/^.*/)[0]), q=p.replace(/^([\s\S]*?)((0*)[0-9]+)\.\.((0*)[0-9]+)([\s\S]*)$/,function(_,p,n,nz,m,mz,q){var r=[],d=Math.max(n.length,m.length),z=(nz||mz)?new Array(d+1).join("0"):"",n=Number(n),m=Number(m); if(n<=m){for(;n<=m;n++)r.push(p+(z+n).slice(-d)+q);}else{for(;n>=m;n--)r.push(p+(z+n).slice(-d)+q);} return r.join("\n")}); if(q!==p)return q }]); </syntaxhighlight> === 除去/削除 === ;★空白文字を除去 :空白文字(半角空白/全角空白/水平タブ)を除去します。 <syntaxhighlight lang="javascript" copy> f.push(["空白文字を除去","s",function(_){ //2013-09-15 return _.replace(/[ \t]+/g,"") }]); </syntaxhighlight> ;★行頭行末/行頭/行末の空白を除去 <syntaxhighlight lang="javascript" copy> f.push(["行頭行末の空白を除去","L",function(_){ //2013-09-15 return _.replace(/^[ \t]+|[ \t]+$/gm,"") }]); f.push(["行頭の空白を除去","L",function(_){ //2015-02-14 return _.replace(/^[ \t]+/gm,"") }]); f.push(["行末の空白を除去","L",function(_){ //2015-02-14 return _.replace(/[ \t]+$/gm,"") }]); </syntaxhighlight> ;空白行の空白を除去 :空白行を、改行のみの空行にします。 <syntaxhighlight lang="javascript" copy> f.push(["空白行の空白を除去","L",function(_){ //2017-06-25 return _.replace(/^[ \t]+$/gm,"") }]); </syntaxhighlight> ;★空白行を削除 :空白行(半角空白/全角空白/水平タブ/改行のみの行)を削除します。 <syntaxhighlight lang="javascript" copy> f.push(["空白行を削除","L",function(_){ //2015-03-14 return _.replace(/^[ \t]*$\n?/gm,"") }]); </syntaxhighlight> ;空白行を圧縮 :連続する空白行を1行の空行に変換します。連続しない(=1行の)空白行は削除します。 <syntaxhighlight lang="javascript" copy> f.push(["空白行を圧縮","L",function(_){ //2015-02-14 return _.replace(/^[ \t]+$/gm,"").replace(/^(\n)\n+|^\n/gm,"$1") }]); </syntaxhighlight> ;空白行を減量 :連続する空白行を1行分削減します。 :空白行の連続が3行なら2行に、2行なら1行に、1行なら0行(=削除)になります。 <syntaxhighlight lang="javascript" copy> f.push(["空白行を減量","L",function(_){ //2015-02-14 return _.replace(/((?:^[ \t]*$\n?)*)(?:^[ \t]*$\n?)/gm,"$1") }]); </syntaxhighlight> ;★重複行を単一化 :同じ内容の行が2個以上ある場合、2個目以降を削除します。 <syntaxhighlight lang="javascript" copy> f.push(["重複行を単一化","L",function(_){ //2018-01-15 var a=_.split("\n"),b=[],map={}; for(var i=0;i<a.length;i++){ if(!Object.prototype.hasOwnProperty.call(map,a[i])){map[a[i]]=true;b.push(a[i])} } return b.join("\n") }]); </syntaxhighlight> ;重複行を単一化(空白行は除く) :空白行(半角空白/全角空白/水平タブ/改行のみの行)は例外とし、削除しません。 <syntaxhighlight lang="javascript" copy> f.push(["重複行を単一化(空白行は除く)","L",function(_){ //2018-01-15 var a=_.split("\n"),b=[],map={}; for(var i=0;i<a.length;i++){ if(/^[ \t]*$/.test(a[i])||!Object.prototype.hasOwnProperty.call(map,a[i])){map[a[i]]=true;b.push(a[i])} } return b.join("\n") }]); </syntaxhighlight> ;★連続する重複行を単一化 <syntaxhighlight lang="javascript" copy> f.push(["連続する重複行を単一化","L",function(_){ //2015-02-14 return _.replace(/(^.*$)\n(^\1$\n?)+/gm,"$2") }]); </syntaxhighlight> ;重複する/しない行を抽出 <syntaxhighlight lang="javascript" copy> f.push(["重複する行を抽出","L",function(_){ //2018-01-15 var a=_.split("\n"),b=[],k=0,map={}; for(var i=0;i<a.length;i++){ if(!Object.prototype.hasOwnProperty.call(map,a[i])){b[k]={dup:false,txt:a[i]};map[a[i]]=k++;}else{b[map[a[i]]].dup=true} } i=b.length;while(--i>=0){ if(b[i].dup){b[i]=b[i].txt}else{b.splice(i,1)} } return b.join("\n") }]); f.push(["重複しない行を抽出","L",function(_){ //2018-01-15 var a=_.split("\n"),b=[],k=0,map={}; for(var i=0;i<a.length;i++){ if(!Object.prototype.hasOwnProperty.call(map,a[i])){b[k]={dup:false,txt:a[i]};map[a[i]]=k++;}else{b[map[a[i]]].dup=true} } i=b.length;while(--i>=0){ if(!b[i].dup){b[i]=b[i].txt}else{b.splice(i,1)} } return b.join("\n") }]); </syntaxhighlight> ;※空白行系/重複行系コマンドの比較 (☐ は空白/↵ は改行) :{|class="wikitable" ! 例文 !! 空白行<br>を削除 !! 空白行<br>を圧縮 !! 空白行<br>を減量 !rowspan="2" width="6px"| ! 例文 !! 重複行を<br>単一化 !! 空白行は<br>除く !! 連続する<br>重複行 !! 重複する<br>行を抽出 !! しない<br>行を抽出 |-style="vertical-align:top;" | 1行目↵<br>☐↵<br>2行目↵<br>☐↵<br>☐☐↵<br>3行目↵<br>☐↵<br>☐☐↵<br>☐☐☐↵<br>4行目 | 1行目↵<br>2行目↵<br>3行目↵<br>4行目 | 1行目↵<br>2行目↵<br>↵<br>3行目↵<br>↵<br>4行目 | 1行目↵<br>2行目↵<br>☐↵<br>3行目↵<br>☐↵<br>☐☐↵<br>4行目 | あいう↵<br>あいう↵<br>☐↵<br>☐↵<br>☐☐↵<br>あいう↵<br>あいう↵<br>カキク↵<br>さしす↵<br>カキク<br> | あいう↵<br>☐↵<br>☐☐↵<br>カキク↵<br>さしす | あいう↵<br>☐↵<br>☐↵<br>☐☐↵<br>カキク↵<br>さしす | あいう↵<br>☐↵<br>☐☐↵<br>あいう↵<br>カキク↵<br>さしす↵<br>カキク | あいう↵<br>☐↵<br>カキク | ☐☐↵<br>さしす |} ;★入力文字列を含む/含まない行を削除... <syntaxhighlight lang="javascript" copy> f.push(["入力文字列を含む行を削除...","L",function(_){ //2019-06-01 var p=Prompt("以下の文字列を含む行を削除:",""); if(p)return _.replace(/^(.*)$\n?/gm,function(s,t){return (t.indexOf(p)>=0)? "":s}) }]); f.push(["入力文字列を含まない行を削除...","L",function(_){ //2019-06-01 var p=Prompt("以下の文字列を含まない行を削除:",""); if(p)return _.replace(/^(.*)$\n?/gm,function(s,t){return (t.indexOf(p)>=0)? s:""}) }]); </syntaxhighlight> ;正規表現に一致する/しない行を削除... :<b style="color:#c00;">※正規表現は JavaScript (JScript) の仕様で記述します。</b> <syntaxhighlight lang="javascript" copy> f.push(["正規表現に一致する行を削除...","L",function(_){ //2019-06-01 var p=Prompt("以下の正規表現に一致する行を削除:",""); if(p){ p=new RegExp(p); return _.replace(/^(.*)$\n?/gm,function(s,t){return p.test(t)? "":s}) } }]); f.push(["正規表現に一致しない行を削除...","L",function(_){ //2019-06-01 var p=Prompt("以下の正規表現に一致しない行を削除:",""); if(p){ p=new RegExp(p); return _.replace(/^(.*)$\n?/gm,function(s,t){return p.test(t)? s:""}) } }]); </syntaxhighlight> ;行頭/行末から数文字削除... :各行の行頭/行末から指定した文字数分を削除します。 :※結合文字列には対応していません。 <syntaxhighlight lang="javascript" copy> f.push(["行頭から数文字削除...","L",function(_){ //2019-06-01 var n=parseInt(Prompt("行頭から削除する字数: ※半角数字","")); if(n>0)return _.replace(new RegExp("^(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\n]){0,"+n+"}","gm"),"") }]); f.push(["行末から数文字削除...","L",function(_){ //2019-06-01 var n=parseInt(Prompt("行末から削除する字数: ※半角数字","")); if(n>0)return _.replace(new RegExp("(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\n]){0,"+n+"}$","gm"),"") }]); </syntaxhighlight> === 検索/置換 === ;ASCII文字を単語検索 :空白文字などを除く ASCII 印字可能文字 (U+0021~007E) が1文字以上連続する箇所を検索します。 <syntaxhighlight lang="javascript" copy> f.push(["ASCII文字を単語検索","",function(_,$){ //2017-05-28 $.Find("(?<!\\g<Graph>)(?<Graph>[!-~])+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;半角カナを単語検索 :半角カナ類 (ヲ~ッ ア~ン 。 「 」 、 ・ ー ゙ ゚) が1文字以上連続する箇所を検索します。 <syntaxhighlight lang="javascript" copy> f.push(["半角カナを単語検索","",function(_,$){ //2017-05-28 $.Find("(?<!\\g<HKana>)(?<HKana>[。-゚])+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;全角英数を単語検索 :全角英数字 (0~9 A~Z a~z) が1文字以上連続する箇所を検索します。 <syntaxhighlight lang="javascript" copy> f.push(["全角英数を単語検索","",function(_,$){ //2017-05-28 $.Find("(?<!\\g<FAlnm>)(?<FAlnm>[0-9A-Za-z])+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;CJK漢字を単語検索 :CJK (China/Japan/Korea) の漢字が1文字以上連続する箇所を検索します。 <syntaxhighlight lang="javascript" copy> f.push(["CJK漢字を単語検索","",function(_,$){ //2017-05-28 $.Find("(?<!\\g<Han>\\g<VS>|\\g<Han>)(?:(?<Han>[\\p{Han}])(?<VS>[\\x{FE00}-\\x{FE02}\\x{E0100}-\\x{E01EF}])?)+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;ひらがなを単語検索 ;カタカナを単語検索 :平仮名/片仮名が1文字以上連続する箇所を検索します。 :※検索対象となる文字は、下表のとおりです。囲み文字 ㋐ や組み文字 ㍍ は含まれません。 :{|class="wikitable" style="text-align:center;" ! !! 種別 !! 文字 !! Shift_JIS !! Unicode !! 備考 |- !rowspan="3"| 平仮名<br>(かな)<br>89字 |rowspan="3"| 全角ひらがな (89字) | ぁ ~ ん<br>ゔゕゖ || 0x829F~82F1<br>- || U+3041~3093<br>U+3094~3096 || ※SJIS では ゔゕゖ の3字は保存不可 |- | ゝゞ || 0x8154, 8155 || U+309D, 309E || 踊り字(繰り返し) |- | ゟ || - || U+309F || 「より」の合字 |- !rowspan="5"| 片仮名<br>(カナ)<br>164字 |rowspan="3"| 全角カタカナ (93字) | ァ ~ ヶ<br>ヷヸヹヺ || 0x8340~8396<br>- || U+30A1~30F6<br>U+30F7~30FA || ※SJIS では ヷヸヹヺ の4字は保存不可 |- | ヽヾ || 0x8152, 8153 || U+30FD, 30FE || 踊り字(繰り返し) |- | ヿ || - || U+30FF || 「コト」の合字 |- | 半角カタカナ (55字) || ヲ ~ ッ<br>ア ~ ン || 0xA6~AF<br>0xB1~DD || U+FF66~FF6F<br>U+FF71~FF9D || |- | カタカナ拡張 (16字) || ㇰ ~ ㇿ || - || U+31F0~31FF || アイヌ語表記などに用いる |- !rowspan="5"| 記号<br>8字 |colspan="5"| <span style="color:#c00;">※以下は、<b>仮名の後</b>に続いて出現する場合のみ検索される。</span>例> 複製゜ー<span style="background:#b4e4b4;">コヒ゜ー</span> |- | 半角/全角濁点 (2字) || ゙ ゛ || 0xDE, 814A || U+FF9E, 309B || |- | 半角/全角半濁点 (2字) || ゚ ゜ || 0xDF, 814B || U+FF9F, 309C || |- | 結合用濁点/半濁点 (2字) || ゙ ゚ || - || U+3099, 309A || 結合文字 |- | 半角/全角長音符 (2字) || ー ー || 0xB0, 815B || U+FF70, 30FC || |} <syntaxhighlight lang="javascript" copy> f.push(["ひらがなを単語検索","",function(_,$){ //2017-05-28 $.Find("(?<!\\g<Kana>\\g<Mark>\\g<Mark>|\\g<Kana>\\g<Mark>|\\g<Kana>)(?:(?<Kana>[ぁ-\\x{3096}ゝゞ\\x{309F}])(?<Mark>[\\x{3099}\\x{309A}゛゙゜゚ーー])*)+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); f.push(["カタカナを単語検索","",function(_,$){ //2017-05-28 $.Find("(?<!\\g<Kana>\\g<Mark>\\g<Mark>|\\g<Kana>\\g<Mark>|\\g<Kana>)(?:(?<Kana>[ァ-\\x{30FA}ヽヾ\\x{30FF}ヲ-ッア-ン\\x{31F0}-\\x{31FF}])(?<Mark>[\\x{3099}\\x{309A}゛゙゜゚ーー])*)+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;CP932依存文字を検索 :Shift_JIS (CP932) の環境依存文字 (NEC特殊文字・IBM拡張文字・ユーザー定義外字・未定義文字) を検索します。 <syntaxhighlight lang="javascript" copy> f.push(["CP932依存文字を検索","",function(_,$){ //2017-05-28 $.Find("[纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏\\x{FA10}增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙\\x{FA12}晳暙暠暲暿曺朎\\x{F929}杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇\\x{FA15}燁燾犱犾猤\\x{FA16}獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦\\x{FA17}睆劯砡硎硤硺礰\\x{FA18}\\x{FA19}\\x{FA1A}禔\\x{FA1B}禛竑竧\\x{FA1C}竫箞\\x{FA1D}絈絜綷綠緖繒罇羡\\x{FA1E}茁荢荿菇菶葈蒴蕓蕙蕫﨟薰\\x{FA20}﨡蠇裵訒訷詹誧誾諟\\x{FA22}諶譓譿賰賴贒赶﨣軏﨤\\x{FA25}遧郞\\x{FA26}鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒\\x{F9DC}﨩隝隯霳霻靃靍靏靑靕顗顥\\x{FA2A}\\x{FA2B}餧\\x{FA2C}馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫\\x{FA2D}鸙黑①-⑳Ⅰ-Ⅹⅰ-ⅹ㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼㍻∮∑∟⊿¦'"\\x{E000}-\\x{E757}\\x{80}\\x{F8F0}-\\x{F8F3}]", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;CJK互換漢字を検索 :CJK互換漢字 (U+F900~FAD9, 2F800~2FA1D) を検索します(CJK統合漢字扱いの12字 および 未定義の2字は除く)。 <syntaxhighlight lang="javascript" copy> f.push(["CJK互換漢字を検索","",function(_,$){ //2018-01-15 $.Find("[[^﨎﨏﨑﨓﨔﨟﨡﨣﨤﨧﨨﨩\\x{FA6E}\\x{FA6F}]&&[\\x{F900}-\\x{FAD9}\\x{2F800}-\\x{2FA1D}]]", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;サロゲートペアを検索 :UTF-16において2バイト2個組で1文字を形成する文字 (U+10000~10FFFF) を検索します。 <syntaxhighlight lang="javascript" copy> f.push(["サロゲートペアを検索","",function(_,$){ //2015-09-30 $.Find("[\\x{10000}-\\x{10FFFF}]", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;結合文字列を検索 :他の文字と組み合わせて1文字を形成する文字列を検索します。 :※結合文字列や異体字を表示するには、アプリやフォントの対応が必要です。 :{|class="wikitable" style="text-align:center;" ! !colspan="4"| ラテン文字 !colspan="3"| ひらがな !colspan="2"| 漢字(異体字) !colspan="2"| 囲み文字 |- ! 実際の表示 | ǖ ||colspan="3"| ǖ | じ ||colspan="2"| じ |colspan="2"| 辻󠄀 |colspan="2"| あ⃞ |- ! 文字の構成 | ǖ || u||̈||̄ | じ || し||゙ | 辻||󠄀 | あ||⃞ |- ! Unicode | 01D6 || 0075||0308||0304 | 3058 || 3057||3099 | 8FBB||E0100 | 3042||20DE |} <syntaxhighlight lang="javascript" copy> f.push(["結合文字列を検索","",function(_,$){ //2017-05-28 $.Find("(?:[^\\p{M}\\n]|^)[\\p{M}]+", meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext) }]); </syntaxhighlight> ;選択文字列を検索 :下記の条件で検索を行います。 :<b style="color:#c00;">※Mery の仕様上、改行や折り返しを含むと検索強調が不完全になります。</b> :{|class="wikitable" ! 検索文字列 | ※選択文字列 |- ! フラグ | 大文字と小文字を区別する (meFindReplaceCase)<br>正規表現を使用する (meFindReplaceRegExp)<br>文末まで検索したら文頭に移動する (meFindAround)<br>下/次を検索 (meFindNext) |} <syntaxhighlight lang="javascript" copy> f.push(["選択文字列を検索","s",function(_,$){ //2019-06-01 var acp=$.GetActivePos(),anp=$.GetAnchorPos(),sx=ScrollX,sy=ScrollY; Redraw=false; $.Find(_.replace(/[$()*+.?\[\\\]^{|}]/g,"\\$&"), meFindReplaceCase+meFindReplaceRegExp+meFindAround+meFindNext); $.SetActivePos(acp);$.SetAnchorPos(anp);ScrollX=sx;ScrollY=sy; Redraw=true; }]); </syntaxhighlight> ;選択文字列をすべて削除 :下記の条件で置換を行い、選択文字列を削除します。 :{|class="wikitable" ! 検索文字列 | ※選択文字列 |- ! 置換文字列 | ※空欄 |- ! フラグ | 大文字と小文字を区別する (meFindReplaceCase)<br>正規表現を使用する (meFindReplaceRegExp)<br>すべて置換 (meReplaceAll) |} <syntaxhighlight lang="javascript" copy> f.push(["選択文字列をすべて削除","s",function(_,$){ //2019-06-01 $.Replace(_.replace(/[$()*+.?\[\\\]^{|}]/g,"\\$&"), "", meFindReplaceCase+meFindReplaceRegExp+meReplaceAll) }]); </syntaxhighlight> ;検索強調をすべて解除 :[検索]→[検索文字列の強調を解除] をすべての文書で実行します。 <syntaxhighlight lang="javascript" copy> f.push(["検索強調をすべて解除","",function(){ //2015-03-14 for(var ei=0;ei<Editors.Count;ei++){var d=Editors.Item(ei).Documents; for(var i=0;i<d.Count;i++){d.Item(i).HighlightFind=false}} }]); </syntaxhighlight> ;検索結果カウント :前回(直前)の検索条件で文書全体を検索し直し、一致した件数をステータスバーに表示します。 :<b style="color:#c00;">※検索条件が複雑なほど、件数が多いほど処理に時間がかかります</b>(作者の環境では、1000件で約2秒かかりました)。 :※処理に時間をかけたくない場合は「<b>[[検索ヒット数表示]]</b>」プラグインの導入をオススメします。 <syntaxhighlight lang="javascript" copy> f.push(["検索結果カウント","",function(_,$){ //2015-09-30 var t=new Date(),n=-1,acp=$.GetActivePos(),anp=$.GetAnchorPos(),sx=ScrollX,sy=ScrollY; Redraw=false; Status=""; $.StartOfDocument(); do{$.FindRepeat(meFindNext);n++}while(!Status); $.SetActivePos(acp);$.SetAnchorPos(anp);ScrollX=sx;ScrollY=sy; Redraw=true; Status=n+"件の検索結果 (処理時間: "+(new Date()-t)/1000+"秒)" }]); </syntaxhighlight> === 文書情報 === ;総字行数カウント :総文字数と総表示行数をステータスバーに表示します。 :表示される数値は「すべて選択」時に表示される字数・行数と同値になります。 :※サロゲートペアは2文字と数えます。 <syntaxhighlight lang="javascript" copy> f.push(["総字行数カウント","",function(){ //2019-06-01 Status=Document.Text.length+"文字 ("+Document.GetLines(meGetLineView)+"表示行)" }]); </syntaxhighlight> ;文字数カウント(空白は除く) :選択範囲または文書全体の文字数(改行/半角空白/全角空白/水平タブは除く)をステータスバーに表示します。 :※サロゲートペアは1文字と数えます。 <syntaxhighlight lang="javascript" copy> f.push(["文字数カウント(空白は除く)","",function(_){ //2019-06-01 Status=(_||Document.Text).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").replace(/[\t\n\r ]/g,"").length+"文字 (改行・空白抜き)" }]); </syntaxhighlight> ;ステータスバーの表示をコピー :ステータスバーの左端の欄に表示されている文字列をコピーします。 <syntaxhighlight lang="javascript" copy> f.push(["ステータスバーの表示をコピー","",function(){ //2019-06-01 ClipboardData.SetData(Status) }]); </syntaxhighlight> ;編集中のファイルのパスをコピー ;編集中の全ファイルのパスをコピー :現在編集中のファイルのパスをクリップボードにコピーします。 :新規作成ファイルなどパスが存在しない場合は、<無題> の文字がコピーされます。 <syntaxhighlight lang="javascript" copy> f.push(["編集中のファイルのパスをコピー","",function(){ //2015-03-14 ClipboardData.SetData(Document.FullName||"<無題>") }]); f.push(["編集中の全ファイルのパスをコピー","",function(){ //2015-03-14 var list=[]; for(var ei=0;ei<Editors.Count;ei++){var d=Editors.Item(ei).Documents; for(var i=0;i<d.Count;i++){list.push(d.Item(i).FullName||"<無題>")}} ClipboardData.SetData(list.join("\r\n")) }]); </syntaxhighlight> === 並べ替え === ;★行を昇順/降順並べ(Unicode) :Unicode 順に並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["行を昇順並べ(Unicode)","L",function(_){ //2017-06-25 return _.replace(/\uFFFF/g,"\uFFFF_").replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"\uFFFF$&").split("\n").sort().join("\n").replace(/\uFFFF([\uD800-\uDBFF][\uDC00-\uDFFF])/g,"$1").replace(/\uFFFF_/g,"\uFFFF") }]); f.push(["行を降順並べ(Unicode)","L",function(_){ //2017-06-25 return _.replace(/\uFFFF/g,"\uFFFF_").replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"\uFFFF$&").split("\n").sort().reverse().join("\n").replace(/\uFFFF([\uD800-\uDBFF][\uDC00-\uDFFF])/g,"$1").replace(/\uFFFF_/g,"\uFFFF") }]); </syntaxhighlight> ;★行を逆順並べ <syntaxhighlight lang="javascript" copy> f.push(["行を逆順並べ","L",function(_){ //2014-10-12 return _.split("\n").reverse().join("\n") }]); </syntaxhighlight> ;行をシャッフル :ランダムに並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["行をシャッフル","L",function(_){ //2014-10-12 var a=_.split("\n"),i=a.length,j,t; while(i){j=Math.floor(Math.random()*i--); t=a[i];a[i]=a[j];a[j]=t;} return a.join("\n") }]); </syntaxhighlight> ;行を文字数順並べ :文字数の少ない順に並べ替えます。 :※符号点(コードポイント)の少ない順。結合文字列には対応していません。 :文字数の多い順に並べ替えたい場合は、<code>a.len-b.len</code> を <code>b.len-a.len</code> に書き換えてください。 <syntaxhighlight lang="javascript" copy> f.push(["行を文字数順並べ","L",function(_){ //2019-06-01 var b=_.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").split("\n"),a=_.split("\n"); for(var i=0;i<a.length;i++){a[i]={len:b[i].length,txt:a[i]}} a.sort(function(a,b){return a.len-b.len}); for(var i=0;i<a.length;i++){a[i]=a[i].txt} return a.join("\n") }]); </syntaxhighlight> ;数行毎に逆順並べ... :選択範囲を指定した行数で区切り、区間ごとに逆順に並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["数行毎に逆順並べ...","L",function(_){ //2019-06-01 var n=parseInt(Prompt("以下の行数毎に逆順並べ: ※半角数字","")); if(n>0)return (_+"\n").replace(new RegExp("(?:^.*$\\n){1,"+n+"}","gm"),function(s){return s.split("\n").reverse().join("\n")}).slice(1) }]); </syntaxhighlight> ;数行一組で逆順並べ... :選択範囲を指定した行数で一組とし、組単位で逆順に並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["数行一組で逆順並べ...","L",function(_){ //2019-06-01 var n=parseInt(Prompt("以下の行数を一組として逆順並べ: ※半角数字","")); if(n>0)return (_+"\n").match(new RegExp("(?:^.*$\\n){1,"+n+"}","gm")).reverse().join("").slice(0,-1) }]); </syntaxhighlight> ;空行毎に逆順並べ :選択範囲を空行(改行のみの行)で区切り、区間ごとに逆順に並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["空行毎に逆順並べ","L",function(_){ //2019-06-01 return (_+"\n").replace(/\n+|[\s\S]*?\n(?=\n|$)/g,function(s){return s.split("\n").reverse().join("\n")}).slice(1) }]); </syntaxhighlight> ;空行一組で逆順並べ :選択範囲を空行区切りで一組とし、組単位で逆順に並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["空行一組で逆順並べ","L",function(_){ //2019-06-01 return (_+"\n").match(/\n+|[\s\S]*?\n(?=\n|$)/g).reverse().join("").slice(0,-1) }]); </syntaxhighlight> ;指定見出しで逆順並べ... :入力した文字列から始まる行を「見出し」とし、見出し単位で逆順に並べ替えます。 <syntaxhighlight lang="javascript" copy> f.push(["指定見出しで逆順並べ...","L",function(_){ //2019-06-01 var p=Prompt("以下の文字から始まる行を一組として逆順並べ:","■").replace(/[$()*+.?\[\\\]^{|}]/g,"\\$&"); if(p){ var r=(_+"\n").match(new RegExp("[\\s\\S]*?\\n(?="+p+"|$)","g")); if(r[0].indexOf(p)!==0)r.push(r.shift()); return r.reverse().join("").slice(0,-1) } }]); </syntaxhighlight> ;※行を逆順並べ系コマンドの比較 (☐ は空白/↵ は改行) :{|class="wikitable" ! 例文 !! 数行毎<br>(3行) !! 数行一組<br>(3行) !rowspan="2" width="6px"| ! 例文 !! 空行毎 !! 空行一組 |- | 1行目1組<br>2行目<br>3行目<br>4行目2組<br>5行目<br>6行目<br>7行目3組<br>8行目<br>9行目<br>10行目4組<br>11行目 | 3行目<br>2行目<br>1行目1組<br>6行目<br>5行目<br>4行目2組<br>9行目<br>8行目<br>7行目3組<br>11行目<br>10行目4組 | 10行目4組<br>11行目<br>7行目3組<br>8行目<br>9行目<br>4行目2組<br>5行目<br>6行目<br>1行目1組<br>2行目<br>3行目 | 1行目1組↵<br>2行目↵<br>3行目↵<br>↵<br>5行目2組↵<br>6行目↵<br>☐☐↵<br>8行目↵<br>↵<br>10行目3組↵<br>11行目 | 3行目↵<br>2行目↵<br>1行目1組↵<br>↵<br>8行目↵<br>☐☐↵<br>6行目↵<br>5行目2組↵<br>↵<br>11行目↵<br>10行目3組 | 10行目3組↵<br>11行目↵<br>↵<br>5行目2組↵<br>6行目↵<br>☐☐↵<br>8行目↵<br>↵<br>1行目1組↵<br>2行目↵<br>3行目 |} ;文字を逆順並べ :各行の文字を逆順に並べ替えます。 :例> <span style="background:#bfdfff;">文字を逆順並べ</span> → べ並順逆を字文 :※[https://unicode.org/reports/tr29/ UAX #29] で規定される「拡張書記素クラスタ」に部分的に対応しています。対応していない文字は位置がズレます。 :* サロゲートペア (U+10000~10FFFF) :* 結合文字の一部 (U+0300~6F, 1AB0~FF, 1DC0~FF, 20D0~FF, 3099~A, FE20~F) :* 異体字セレクタ (U+180B~D, FE00~F, E0100~EF) :* ゼロ幅非接合子/接合子 (U+200C~D) :* 絵文字の国旗 (U+1F1E6~FF) :* 絵文字の肌色指定 (U+1F3FB~F) :* 結合不可の制御文字 (U+0000~1F, 007F~9F, 00AD, 2028~9, FEFF) :例> <span style="background:#bfdfff;">𠮟る/りんご/tréma</span> → amért/ごんり/る𠮟 :{|class="wikitable" style="text-align:center;" ! 例文 |colspan="2"|𠮟||る !rowspan="6" width="6px"| |り||ん||colspan="2"|ご !rowspan="6" width="6px"| |t||r||colspan="2"|é||m||a |- ! Unicode |colspan="2"|20B9F||308B |308A||3093||style="background:#fe6;"|3053||style="background:#fcc;"|3099 |0074||0072||style="background:#fe6;"|0065||style="background:#fcc;"|0301||006D||0061 |- ! UTF-16 |style="background:#fe6;"|D842||style="background:#fcc;"|DF9F||308B |colspan="4"|※同上 |colspan="6"|※同上 |- !rowspan="3"|実行後 |る||colspan="2"|𠮟 |colspan="2"|ご||ん||り |a||m||colspan="2"|é||r||t |- |308B||colspan="2"|20B9F |style="background:#fe6;"|3053||style="background:#fcc;"|3099||3093||308A |0061||006D||style="background:#fe6;"|0065||style="background:#fcc;"|0301||0072||0074 |- |308B||style="background:#fe6;"|D842||style="background:#fcc;"|DF9F |colspan="4"|※同上 |colspan="6"|※同上 |} <syntaxhighlight lang="javascript" copy> f.push(["文字を逆順並べ","s",function(_){ //2017-06-25 var X=new RegExp(/[\x00-\x1F\x7F-\x9F\xAD\u2028\u2029\uFEFF]|(?:(?:\uD83C[\uDDE6-\uDDFF]){2}|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\s\S])(?:[\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\u3099\u309A\uFE20-\uFE2F\u200C\u200D\u180B-\u180D\uFE00-\uFE0F]|\uDB40[\uDD00-\uDDEF]|\uD83C[\uDFFB-\uDFFF])*/g); return _.replace(/[^\n]+/g,function(s){return s.match(X).reverse().join("")}) }]); </syntaxhighlight> ;文字をシャッフル :各行の文字をランダムに並べ替えます。 :例> <span style="background:#bfdfff;">文字をシャッフル</span> → フ字をャシッル文 <syntaxhighlight lang="javascript" copy> f.push(["文字をシャッフル","s",function(_){ //2017-06-25 var X=new RegExp(/[\x00-\x1F\x7F-\x9F\xAD\u2028\u2029\uFEFF]|(?:(?:\uD83C[\uDDE6-\uDDFF]){2}|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\s\S])(?:[\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\u3099\u309A\uFE20-\uFE2F\u200C\u200D\u180B-\u180D\uFE00-\uFE0F]|\uDB40[\uDD00-\uDDEF]|\uD83C[\uDFFB-\uDFFF])*/g); return _.replace(/[^\n]+/g,function(s){var a=s.match(X),i=a.length,j,t; while(i){j=Math.floor(Math.random()*i--); t=a[i];a[i]=a[j];a[j]=t;} return a.join("")}) }]); </syntaxhighlight> === 字種/数値変換 === ;★半角英数→全角 ;★全角英数→半角 <syntaxhighlight lang="javascript" copy> f.push(["半角英数→全角","s",function(_){ //2014-02-10 return _.replace(/[0-9A-Za-z]/g,function(s){return String.fromCharCode(s.charCodeAt(0)+0xFEE0)}) }]); f.push(["全角英数→半角","s",function(_){ //2014-02-10 return _.replace(/[0-9A-Za-z]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0xFEE0)}) }]); </syntaxhighlight> ;★半角カナ→全角 ;★全角カナ→半角 <syntaxhighlight lang="javascript" copy> f.push(["半角カナ→全角","s",function(_){ //2015-03-14 return _.replaceBatch([ ["ヴ","ヴ"],["ガ","ガ"],["ギ","ギ"],["グ","グ"],["ゲ","ゲ"],["ゴ","ゴ"],["ザ","ザ"],["ジ","ジ"],["ズ","ズ"],["ゼ","ゼ"],["ゾ","ゾ"],["ダ","ダ"],["ヂ","ヂ"],["ヅ","ヅ"],["デ","デ"],["ド","ド"],["バ","バ"],["ビ","ビ"],["ブ","ブ"],["ベ","ベ"],["ボ","ボ"],["パ","パ"],["ピ","ピ"],["プ","プ"],["ペ","ペ"],["ポ","ポ"],["。","。"],["「","「"],["」","」"],["、","、"],["・","・"],["ヲ","ヲ"],["ァ","ァ"],["ィ","ィ"],["ゥ","ゥ"],["ェ","ェ"],["ォ","ォ"],["ャ","ャ"],["ュ","ュ"],["ョ","ョ"],["ッ","ッ"],["ー","ー"],["ア","ア"],["イ","イ"],["ウ","ウ"],["エ","エ"],["オ","オ"],["カ","カ"],["キ","キ"],["ク","ク"],["ケ","ケ"],["コ","コ"],["サ","サ"],["シ","シ"],["ス","ス"],["セ","セ"],["ソ","ソ"],["タ","タ"],["チ","チ"],["ツ","ツ"],["テ","テ"],["ト","ト"],["ナ","ナ"],["ニ","ニ"],["ヌ","ヌ"],["ネ","ネ"],["ノ","ノ"],["ハ","ハ"],["ヒ","ヒ"],["フ","フ"],["ヘ","ヘ"],["ホ","ホ"],["マ","マ"],["ミ","ミ"],["ム","ム"],["メ","メ"],["モ","モ"],["ヤ","ヤ"],["ユ","ユ"],["ヨ","ヨ"],["ラ","ラ"],["リ","リ"],["ル","ル"],["レ","レ"],["ロ","ロ"],["ワ","ワ"],["ン","ン"],["゙","゛"],["゚","゜"] ]) }]); f.push(["全角カナ→半角","s",function(_){ //2015-03-14 return _.replaceBatch([ ["ヴ","ヴ"],["ガ","ガ"],["ギ","ギ"],["グ","グ"],["ゲ","ゲ"],["ゴ","ゴ"],["ザ","ザ"],["ジ","ジ"],["ズ","ズ"],["ゼ","ゼ"],["ゾ","ゾ"],["ダ","ダ"],["ヂ","ヂ"],["ヅ","ヅ"],["デ","デ"],["ド","ド"],["バ","バ"],["ビ","ビ"],["ブ","ブ"],["ベ","ベ"],["ボ","ボ"],["パ","パ"],["ピ","ピ"],["プ","プ"],["ペ","ペ"],["ポ","ポ"],["。","。"],["「","「"],["」","」"],["、","、"],["・","・"],["ヲ","ヲ"],["ァ","ァ"],["ィ","ィ"],["ゥ","ゥ"],["ェ","ェ"],["ォ","ォ"],["ャ","ャ"],["ュ","ュ"],["ョ","ョ"],["ッ","ッ"],["ー","ー"],["ア","ア"],["イ","イ"],["ウ","ウ"],["エ","エ"],["オ","オ"],["カ","カ"],["キ","キ"],["ク","ク"],["ケ","ケ"],["コ","コ"],["サ","サ"],["シ","シ"],["ス","ス"],["セ","セ"],["ソ","ソ"],["タ","タ"],["チ","チ"],["ツ","ツ"],["テ","テ"],["ト","ト"],["ナ","ナ"],["ニ","ニ"],["ヌ","ヌ"],["ネ","ネ"],["ノ","ノ"],["ハ","ハ"],["ヒ","ヒ"],["フ","フ"],["ヘ","ヘ"],["ホ","ホ"],["マ","マ"],["ミ","ミ"],["ム","ム"],["メ","メ"],["モ","モ"],["ヤ","ヤ"],["ユ","ユ"],["ヨ","ヨ"],["ラ","ラ"],["リ","リ"],["ル","ル"],["レ","レ"],["ロ","ロ"],["ワ","ワ"],["ン","ン"],["゛","゙"],["゜","゚"] ]) }]); </syntaxhighlight> ;★全角かな→カナ ;★全角カナ→かな :全角ひらがなと全角カタカナを変換します。 :ただし、ヴヵヶ → ゔゕゖ の変換は行いません(Shift_JIS では保存できない文字のため)。 <syntaxhighlight lang="javascript" copy> f.push(["全角かな→カナ","s",function(_){ //2014-02-10 return _.replace(/[\u3041-\u3096ゝゞ]/g,function(s){return String.fromCharCode(s.charCodeAt(0)+0x60)}) }]); f.push(["全角カナ→かな(ヴヵヶ除く)","s",function(_){ //2015-02-14 return _.replace(/[\u30A1-\u30F3ヽヾ]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0x60)}) }]); </syntaxhighlight> :ヴヵヶ → ゔゕゖ の変換も行う場合は、下記の内容に差し替えてください。 <syntaxhighlight lang="javascript" copy> f.push(["全角カナ→かな","s",function(_){ //2014-02-10 return _.replace(/[\u30A1-\u30F6ヽヾ]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0x60)}) }]); </syntaxhighlight> ;全角仮名+濁点を合成 :全角仮名+濁点(結合/全角/半角)の2文字を、1文字に合成可能ならば合成します。 :例> <span style="background:#bfdfff;">あ゙じう゛ヷヘ゜か゚</span> → あ゙じゔヷペか゚ :※「あ゙」「か゚」は合成不能のため変化なし。 <syntaxhighlight lang="javascript" copy> f.push(["全角仮名+濁点を合成","s",function(_){ //2019-12-21 var map={"\u3099":"゙","゛":"゙","゙":"゙","\u309A":"゚","゜":"゚","゚":"゚","が":"が","ぎ":"ぎ","ぐ":"ぐ","げ":"げ","ご":"ご","ざ":"ざ","じ":"じ","ず":"ず","ぜ":"ぜ","ぞ":"ぞ","だ":"だ","ぢ":"ぢ","づ":"づ","で":"で","ど":"ど","ば":"ば","び":"び","ぶ":"ぶ","べ":"べ","ぼ":"ぼ","ゞ":"ゞ","ガ":"ガ","ギ":"ギ","グ":"グ","ゲ":"ゲ","ゴ":"ゴ","ザ":"ザ","ジ":"ジ","ズ":"ズ","ゼ":"ゼ","ゾ":"ゾ","ダ":"ダ","ヂ":"ヂ","ヅ":"ヅ","デ":"デ","ド":"ド","バ":"バ","ビ":"ビ","ブ":"ブ","ベ":"ベ","ボ":"ボ","ヾ":"ヾ","ぱ":"ぱ","ぴ":"ぴ","ぷ":"ぷ","ぺ":"ぺ","ぽ":"ぽ","パ":"パ","ピ":"ピ","プ":"プ","ペ":"ペ","ポ":"ポ","ゔ":"ゔ","ヴ":"ヴ","ヷ":"ヷ","ヸ":"ヸ","ヹ":"ヹ","ヺ":"ヺ"}; return _.replace(/([うウかきくけこさしすせそたちつてとはひふへほゝカキクケコサシスセソタチツテトハヒフヘホヽワヰヱヲ])([\u3099゛゙\u309A゜゚])/g,function(s,k,v){return map[k+map[v]]||s}) }]); </syntaxhighlight> ;標準変換 :マクロ「<b>[[標準変換]]</b>」を移植(一部改変)したものです。 :全角英数・全角記号は半角に、半角カナは全角に変換します。 :{|class="wikitable" ! 文字 !! 変換前 ! 文字 !! 標準変換版 ! 文字 !! テキスト整形版 |- |align="center"| ‘ || 全角左シングルクォート |align="center"| ` || 半角グレーブアクセント |align="center"| ' || 半角アポストロフィー/シングルクォート |- |align="center"| ` || 全角グレーブアクセント | || ※変換しない |align="center"| ` || 半角グレーブアクセント/バッククォート |} <syntaxhighlight lang="javascript" copy> f.push(["標準変換","s",function(_){ //2015-03-14 return _.replaceBatch([ [" "," "],["!","!"],["“",'"'],["”",'"'],["#","#"],["$","$"],["%","%"],["&","&"],["‘","'"],["’","'"],["(","("],[")",")"],["*","*"],["+","+"],[",",","],["-","-"],[".","."],["/","/"],["0","0"],["1","1"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["7","7"],["8","8"],["9","9"],[":",":"],[";",";"],["<","<"],["=","="],[">",">"],["?","?"],["@","@"],["A","A"],["B","B"],["C","C"],["D","D"],["E","E"],["F","F"],["G","G"],["H","H"],["I","I"],["J","J"],["K","K"],["L","L"],["M","M"],["N","N"],["O","O"],["P","P"],["Q","Q"],["R","R"],["S","S"],["T","T"],["U","U"],["V","V"],["W","W"],["X","X"],["Y","Y"],["Z","Z"],["[","["],["¥","\\"],["]","]"],["^","^"],["_","_"],["`","`"],["a","a"],["b","b"],["c","c"],["d","d"],["e","e"],["f","f"],["g","g"],["h","h"],["i","i"],["j","j"],["k","k"],["l","l"],["m","m"],["n","n"],["o","o"],["p","p"],["q","q"],["r","r"],["s","s"],["t","t"],["u","u"],["v","v"],["w","w"],["x","x"],["y","y"],["z","z"],["{","{"],["|","|"],["}","}"],["~","~"],["ヴ","ヴ"],["ガ","ガ"],["ギ","ギ"],["グ","グ"],["ゲ","ゲ"],["ゴ","ゴ"],["ザ","ザ"],["ジ","ジ"],["ズ","ズ"],["ゼ","ゼ"],["ゾ","ゾ"],["ダ","ダ"],["ヂ","ヂ"],["ヅ","ヅ"],["デ","デ"],["ド","ド"],["バ","バ"],["ビ","ビ"],["ブ","ブ"],["ベ","ベ"],["ボ","ボ"],["パ","パ"],["ピ","ピ"],["プ","プ"],["ペ","ペ"],["ポ","ポ"],["。","。"],["「","「"],["」","」"],["、","、"],["・","・"],["ヲ","ヲ"],["ァ","ァ"],["ィ","ィ"],["ゥ","ゥ"],["ェ","ェ"],["ォ","ォ"],["ャ","ャ"],["ュ","ュ"],["ョ","ョ"],["ッ","ッ"],["ー","ー"],["ア","ア"],["イ","イ"],["ウ","ウ"],["エ","エ"],["オ","オ"],["カ","カ"],["キ","キ"],["ク","ク"],["ケ","ケ"],["コ","コ"],["サ","サ"],["シ","シ"],["ス","ス"],["セ","セ"],["ソ","ソ"],["タ","タ"],["チ","チ"],["ツ","ツ"],["テ","テ"],["ト","ト"],["ナ","ナ"],["ニ","ニ"],["ヌ","ヌ"],["ネ","ネ"],["ノ","ノ"],["ハ","ハ"],["ヒ","ヒ"],["フ","フ"],["ヘ","ヘ"],["ホ","ホ"],["マ","マ"],["ミ","ミ"],["ム","ム"],["メ","メ"],["モ","モ"],["ヤ","ヤ"],["ユ","ユ"],["ヨ","ヨ"],["ラ","ラ"],["リ","リ"],["ル","ル"],["レ","レ"],["ロ","ロ"],["ワ","ワ"],["ン","ン"],["゙","゛"],["゚","゜"] ]) }]); </syntaxhighlight> ;表外漢字→代替 :[https://ja.wiktionary.org/wiki/%E4%BB%98%E9%8C%B2:%E8%A1%A8%E5%A4%96%E6%BC%A2%E5%AD%97%E5%AD%97%E4%BD%93%E8%A1%A8%E3%81%AE%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7 表外漢字字体表] 1022字のうち <span style="background:#ffee62;">Shift_JIS (CP932) では保存できない文字40字</span>を、保存できる文字に置換します。 :{|class="wikitable" style="font:120% 'ヒラギノ角ゴ ProN W3','ヒラギノ角ゴ ProN','メイリオ',Meiryo,sans-serif;" |-style="background:#ffee62;" |啞||焰||鷗||摑||麴||噓||俠||頰||軀||俱||繫||姸||鹼||嚙||攢||𠮟||繡||蔣||醬||蟬||搔||瘦||驒||簞||塡||顚||禱||瀆||吞||囊||剝||潑||醱||屛||幷||麵||萊||屢||沪||蠟 |- |唖||焔||鴎||掴||麹||嘘||侠||頬||躯||倶||繋||妍||鹸||噛||攅||叱||繍||蒋||醤||蝉||掻||痩||騨||箪||填||顛||祷||涜||呑||嚢||剥||溌||醗||屏||并||麺||莱||屡||濾||蝋 |} <syntaxhighlight lang="javascript" copy> f.push(["表外漢字→代替","s",function(_){ //2017-06-25 return _.replaceBatch([ ["\u555E","唖"],["\u7130","焔"],["\u9DD7","鴎"],["\u6451","掴"],["\u9EB4","麹"],["\u5653","嘘"],["\u4FE0","侠"],["\u9830","頬"],["\u8EC0","躯"],["\u4FF1","倶"],["\u7E6B","繋"],["\u59F8","妍"],["\u9E7C","鹸"],["\u5699","噛"],["\u6522","攅"],["\uD842\uDF9F","叱"],["\u7E61","繍"],["\u8523","蒋"],["\u91AC","醤"],["\u87EC","蝉"],["\u6414","掻"],["\u7626","痩"],["\u9A52","騨"],["\u7C1E","箪"],["\u5861","填"],["\u985A","顛"],["\u79B1","祷"],["\u7006","涜"],["\u541E","呑"],["\u56CA","嚢"],["\u525D","剥"],["\u6F51","溌"],["\u91B1","醗"],["\u5C5B","屏"],["\u5E77","并"],["\u9EB5","麺"],["\u840A","莱"],["\u5C62","屡"],["\u6CAA","濾"],["\u881F","蝋"] ]) }]); </syntaxhighlight> ;★10→16進数 :半角数字列を10進数値とみなし、16進数値に変換します。 :例> <span style="background:#bfdfff;">291/15/44015</span> → 123/F/ABEF <syntaxhighlight lang="javascript" copy> f.push(["10→16進数","s",function(_){ //2014-05-31 return _.replace(/[0-9]+/g,function(s){return Number(s).toString(16).toUpperCase()}) }]); </syntaxhighlight> ;★16→10進数 :半角英数字列を16進数値とみなし、10進数値に変換します。英字の大小、0x の有無は問いません。 :例> <span style="background:#bfdfff;">123/0x0F/abef</span> → 291/15/44015 <syntaxhighlight lang="javascript" copy> f.push(["16→10進数","s",function(_){ //2017-06-25 return _.replace(/(?:0x)?([0-9a-f]+)/gi,function(_,x){return Number("0x"+x)}) }]); </syntaxhighlight> ;2進接頭辞換算 :半角数字列を 2<sup>10</sup> = 1024 の倍量単位 (Ki,Mi,Gi...Yi) に変換します(小数点第3位を四捨五入)。 :例> <span style="background:#bfdfff;">1023/1024/54321/1,048,576/1,073,741,824</span> → 1023/1.00Ki/53.05Ki/1.00Mi/1.00Gi <syntaxhighlight lang="javascript" copy> f.push(["2進接頭辞換算","s",function(_){ //2015-03-14 var k=1024,p="?KMGTPEZY"; return _.replace(/[0-9]+(,?[0-9]{3})+/g,function(s){var x=0,n=s.replace(/,/g,""); if(n<k)return s; while(n>=k&&x<8){n/=k;x++} return n.toFixed(2)+p.charAt(x)+"i"}) }]); </syntaxhighlight> === 符号化/復号化 === ;URL %エンコード/デコード(UTF-8) :URL アドレスに使用されるパーセントエンコーディングの符号化/復号化を行います。 <syntaxhighlight lang="javascript" copy> f.push(["URL %エンコード(UTF-8)","s",function(_){ //2014-02-01 return encodeURI(_).replace(/%0D%0A|%0D|%0A/g,"\n") }]); f.push(["URL %デコード(UTF-8)","s",function(_){ //2014-02-01 return decodeURIComponent(_) }]); </syntaxhighlight> ;Base64エンコード/デコード(UTF-8) :[https://ja.wikipedia.org/wiki/Base64 Base64] 形式の符号化/復号化を行います。 :※バイナリデータ(画像や音声など)の復号化は、[編集]→[選択範囲の変換]→[Base64デコード] をご利用ください。 :<b style="color:#c00;">注意事項</b> :* 改行は LF (0x0A) としてエンコードされます。 :* A~Z a~z 0~9 + / 以外の文字(改行含む)は除去してからデコードされます。 <syntaxhighlight lang="javascript" copy> f.push(["Base64エンコード(UTF-8)","s",function(_){ //2019-12-21 var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), bin=unescape(encodeURIComponent(_)), n=bin.length, asc="", x; for(var i=0;i<n;){x=(bin.charCodeAt(i++)<<16)|(bin.charCodeAt(i++)<<8)|(bin.charCodeAt(i++)); asc+=A[x>>>18&0x3F]+A[x>>>12&0x3F]+A[x>>>6&0x3F]+A[x&0x3F]} if(n%3)asc=asc.slice(0,n%3-3)+"===".slice(n%3); return asc }]); f.push(["Base64デコード(UTF-8)","s",function(_){ //2019-12-21 var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", B={}; for(var i=0;i<A.length;i++){B[A.charAt(i)]=i} var asc=_.replace(/[^A-Za-z0-9+/]/g,"").split(""), n=asc.length, bin="", x; for(var i=0;i<n;){x=(B[asc[i++]]<<18)|(B[asc[i++]]<<12)|(B[asc[i++]]<<6)|(B[asc[i++]]); bin+=String.fromCharCode(x>>>16&0xFF,x>>>8&0xFF,x&0xFF)} bin=bin.replace(/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}|.){1,50}/g,function(bin){return decodeURIComponent(escape(bin))}); if(n%4)bin=bin.slice(0,n%4-4); return bin }]); </syntaxhighlight> ;\uHHHH エンコード/デコード :JavaScript などで使用される \uHHHH 形式の変換を行います。※HHHH=4桁の16進数 :例> <span style="background:#bfdfff;">Aわ𩸽</span> ←→ <span style="background:#bfdfff;">\u0041\u308F\uD867\uDE3D</span> <syntaxhighlight lang="javascript" copy> f.push(["\\uHHHH エンコード","s",function(_){ //2017-06-25 return _.replace(/[^\n]/g,function(s){return "\\u"+("000"+s.charCodeAt(0).toString(16).toUpperCase()).slice(-4)}) }]); f.push(["\\uHHHH デコード","s",function(_){ //2014-10-12 return _.replace(/\\u([0-9A-Fa-f]{4})/g,function(_,n){return String.fromCharCode(Number("0x"+n))}) }]); </syntaxhighlight> ;\u4H \U8H エンコード/デコード :Unicode で使用される \u4H および \U8H 形式の変換を行います。※4H, 8H=4桁, 8桁の16進数 :例> <span style="background:#bfdfff;">Aわ𩸽</span> ←→ <span style="background:#bfdfff;">\u0041\u308F\U00029E3D</span> <syntaxhighlight lang="javascript" copy> f.push(["\\u4H \\U8H エンコード","s",function(_){ //2017-06-25 return _.replace(/[^\n]+/g,function(s){var r="",u,v; for(var i=0;i<s.length;i++){u=s.charCodeAt(i); if(0xD800<=u&&u<=0xDBFF){v=s.charCodeAt(i+1); if(0xDC00<=v&&v<=0xDFFF){i++;u=0x10000+(u-0xD800<<10)+(v-0xDC00);r+="\\U"+toHex(u,8);continue}} r+="\\u"+toHex(u,4)} return r}); function toHex(n,d){return ("000"+n.toString(16).toUpperCase()).slice(-d)} }]); f.push(["\\u4H \\U8H デコード","s",function(_){ //2015-09-30 return _.replace(/\\u([0-9A-Fa-f]{4})|\\U([0-9A-Fa-f]{8})/g,function(s,u4,U8){var n=Number("0x"+(u4||U8)); return (n<=0xFFFF)?String.fromCharCode(n): (n<=0x10FFFF)?String.fromCharCode(n-0x10000>>10|0xD800,n&0x3FF|0xDC00): s}) }]); </syntaxhighlight> ;\x{hex} エンコード/デコード :Mery の正規表現 (鬼車/鬼雲) などで使用される \x{hex} 形式の変換を行います。※hex=1~6桁の16進数 :例> <span style="background:#bfdfff;">Aわ𩸽</span> ←→ <span style="background:#bfdfff;">\x{41}\x{308f}\x{29e3d}</span> <syntaxhighlight lang="javascript" copy> f.push(["\\x{hex} エンコード","s",function(_){ //2017-06-25 return _.replace(/[^\n]+/g,function(s){var r="",u,v; for(var i=0;i<s.length;i++){u=s.charCodeAt(i); if(0xD800<=u&&u<=0xDBFF){v=s.charCodeAt(i+1); if(0xDC00<=v&&v<=0xDFFF){i++;u=0x10000+(u-0xD800<<10)+(v-0xDC00)}} r+=("\\x{"+u.toString(16)+"}")} return r}) }]); f.push(["\\x{hex} デコード","s",function(_){ //2015-03-14 return _.replace(/\\x\{([0-9A-Fa-f]{1,6})\}/g,function(s,n){n=Number("0x"+n); return (n<=0xFFFF)?String.fromCharCode(n): (n<=0x10FFFF)?String.fromCharCode(n-0x10000>>10|0xD800,n&0x3FF|0xDC00): s}) }]); </syntaxhighlight> ;&#dec; エンコード/デコード :HTML などで使用される &#dec; 形式の変換を行います。※dec=1~7桁の10進数 :例> <span style="background:#bfdfff;">Aわ𩸽</span> ←→ <span style="background:#bfdfff;">&#65;&#12431;&#171581;</span> <syntaxhighlight lang="javascript" copy> f.push(["&&#dec; エンコード","s",function(_){ //2017-06-25 return _.replace(/[^\n]+/g,function(s){var r="",u,v; for(var i=0;i<s.length;i++){u=s.charCodeAt(i); if(0xD800<=u&&u<=0xDBFF){v=s.charCodeAt(i+1); if(0xDC00<=v&&v<=0xDFFF){i++;u=0x10000+(u-0xD800<<10)+(v-0xDC00)}} r+=("&#"+u+";")} return r}) }]); f.push(["&&#dec; デコード","s",function(_){ //2015-03-14 return _.replace(/&#([0-9]{1,7});/g,function(s,n){n=Number(n); return (n<=0xFFFF)?String.fromCharCode(n): (n<=0x10FFFF)?String.fromCharCode(n-0x10000>>10|0xD800,n&0x3FF|0xDC00): s}) }]); </syntaxhighlight> ;&#xHEX; エンコード/デコード :HTML などで使用される &#xHEX; 形式の変換を行います。※HEX=1~6桁の16進数 :例> <span style="background:#bfdfff;">Aわ𩸽</span> ←→ <span style="background:#bfdfff;">&#x41;&#x308F;&#x29E3D;</span> <syntaxhighlight lang="javascript" copy> f.push(["&&#xHEX; エンコード","s",function(_){ //2017-06-25 return _.replace(/[^\n]+/g,function(s){var r="",u,v; for(var i=0;i<s.length;i++){u=s.charCodeAt(i); if(0xD800<=u&&u<=0xDBFF){v=s.charCodeAt(i+1); if(0xDC00<=v&&v<=0xDFFF){i++;u=0x10000+(u-0xD800<<10)+(v-0xDC00)}} r+=("&#x"+u.toString(16).toUpperCase()+";")} return r}) }]); f.push(["&&#xHEX; デコード","s",function(_){ //2017-06-25 return _.replace(/&#[Xx]([0-9A-Fa-f]{1,6});/g,function(s,n){n=Number("0x"+n); return (n<=0xFFFF)?String.fromCharCode(n): (n<=0x10FFFF)?String.fromCharCode(n-0x10000>>10|0xD800,n&0x3FF|0xDC00): s}) }]); </syntaxhighlight> === 拡張コード用 === ;拡張コード テンプレート :拡張コードの雛形を挿入します。コマンドを自作したい場合にご利用ください。 <syntaxhighlight lang="javascript" copy> f.push(["拡張コード テンプレート",function(f){ //2019-06-01 f.push(["コマンド","",function(_,$){ $.StartOfLine(); return ['f.push(["コマンド","",function(_,$){\n ' , ' }]);\n'] }]); f.push(["コマンド s (選択必須)","",function(_,$){ $.StartOfLine(); return ['f.push(["コマンド","s",function(_,$){\n return _.replace(' , ') }]);\n'] }]); f.push(["コマンド L (行選択)","",function(_,$){ $.StartOfLine(); return ['f.push(["コマンド","L",function(_,$){\n return _.replace(' , ') }]);\n'] }]); f.push(["サブメニュー","L",function(_){ return ['f.push(["' , 'メニュー' , '",function(f){\n'+ _ +'\n}]);'] }]); f.push(["セパレーター","",function(_,$){ $.StartOfLine(); return ['f.push(["--------"]);\n' , ''] }]); }]); </syntaxhighlight> ;replaceBatch 補助 :[[#replaceBatch メソッド|replaceBatch メソッド]]用の配列作成を補助するコマンド群です。 :※書式の解析精度は不完全です。検索/置換文字に <code>" ' , / \ ]</code> を含む配列は誤変換する恐れがあります。 :※書式ミスは考慮していません。誤変換した場合は書式ミスの可能性も疑ってみてください。 ;交換 ["a","b"] → ["b","a"] :配列の検索文字列と置換文字列を入れ替えます。正規表現は検索側のみ使用可なので交換しません(例では <code>■,□</code> のペアが該当)。 :例> <code style="background:#bfdfff;">["●","○"],['▲','△'],[/■/g,"□"],["◆",'◇']</code> → <code>["○","●"],['△','▲'],[/■/g,"□"],['◇',"◆"]</code> <syntaxhighlight lang="javascript" copy> f.push(['交換 ["a","b"] → ["b","a"]',"s",function(_){ //2014-05-31 return _.replace(/\[("[^\\"]*(?:\\.[^\\"]*)*"|'[^\\']*(?:\\.[^\\']*)*'),("[^\\"]*(?:\\.[^\\"]*)*"|'[^\\']*(?:\\.[^\\']*)*')\]/g,"[$2,$1]") }]); </syntaxhighlight> ;分割 ["a","b"] → "a" › "b"↵ ;結合 "a" › "b"↵ → ["a","b"] :配列と TSV 形式を変換します。 <syntaxhighlight lang="javascript" copy> f.push(['分割 ["a","b"] → "a" \u203A "b"\u21B5',"L",function(_){ //2017-06-25 return _.replace(/,?\[("[^\\"]*(?:\\.[^\\"]*)*"|'[^\\']*(?:\\.[^\\']*)*'|\/.*?\/[gim]*),("[^\\"]*(?:\\.[^\\"]*)*"|'[^\\']*(?:\\.[^\\']*)*')\],?/g,"\n$1\t$2\n").replace(/\n\n/g,"\n") }]); f.push(['結合 "a" \u203A "b"\u21B5 → ["a","b"]',"L",function(_){ //2015-03-14 return _.replace(/\n?(((".*"|'.*'|\/.*\/[gim]*)\t(".*"|'.*')\n*)+)/g,function(s,r){return r.replace(/(".*"|'.*'|\/.*\/[gim]*)\t(".*"|'.*')\n*/g,"[$1,$2],").replace(/,$/,"")}) }]); </syntaxhighlight>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク