半角数字と全角数字を漢数字に置換したりして、日本の小説の書き方の規則(ルール)で文を直すJavaScript(とHTML)のコード

 日本の小説の書き方の規則(ルール)で文を直します。


 不具合が有るかもしれないので、利用は自己責任で御願いいたします。


 半角数字と全角数字を漢数字に置換したい場合、各行の全角空白の字下げを全て、または、一部、忘れているのを直したい場合、文を縦書き表示に対応したい場合などに役立つと思います。


 ただし、読点(、)や句点(。)の後ろ以外で改行している場合は、正しく整形できません。


 整形後、目視で自分で見直してください。


 チェック ボックスにチェックすると、半角ドット(.)を全角ドット(.)に置換しますが、半角ドット以外の半角記号は全角には置換しません。


 縦書き表示すると、半角記号が不自然に表示される場合が有ります。



 Github Pagesで半角数字と全角数字を漢数字に置換したりして、日本の小説の書き方の規則(ルール)で文を直すウェブ ページを公開しております。

 グーグル検索エンジンで「github eliphas1810 小説」などで検索してみてください。



 「小説家になろう」にも投稿しています。



 各行の最初が1文字以上の全角空白や半角空白の連続の場合は1文字だけの全角空白の字下げに置換します。



 各行の最後が1文字以上の全角空白や半角空白の連続の場合は除去します。


 各行の最初の文字が全角空白でも「でもない場合は全角空白で字下げします。



 1つだけの…を2つの……に置換します。

 3つだけの………を4つの…………に置換します。

 5つだけの……………を6つの………………に置換します。


 ただし、7つ以上の奇数の…………………などは、偶数に置換しても、奇数と偶数を見分けるのが困難なので、置換しません。



 1つだけの―を2つの――に置換します。

 3つだけの―――を4つの――――に置換します。

 5つだけの―――――を6つの――――――に置換します。


 ただし、7つ以上の奇数の―――――――などは、偶数に置換しても、奇数と偶数を見分けるのが困難なので、置換しません。



 会話文の、改行の後の半角空白か全角空白の連続と、改行を除去します。


 会話文の後に地の文が繋がっていて混在している文は、全角空白で字下げします。



 。」を」に置換します。

 。』を』に置換します。



 」や』の前の1文字以上の半角空白や全角空白の連続を除去します。



 全角の?か全角の!の次が全角空白でも全角の?でも全角の!でも」でも』でも(でも)でも改行でもない場合は全角空白を挿入します。



 。の後の半角空白や全角空白の連続を除去します。


 、改行の後の半角空白や全角空白の連続を除去します。



 半角数字と全角数字を漢数字に置換します。

 半角ドット(.)を全角ドット(.)に置換します。

 ただし、整数部が千垓の十倍以上の数に相当する25文字以上の数字の場合は、〇から九までの漢数字の羅列に置換します。

 また、整数部が2文字以上の数字で第1文字目が半角数字のゼロ(0)か全角数字のゼロ(0)の場合も、〇から九までの漢数字の羅列に置換します。

 また、1文字だけの半角数字ゼロ(0)や全角数字ゼロ(0)を零に置換します。

 そして、チェックを外せば、半角数字と全角数字を漢数字に置換しませんし、半角ドット(.)を全角ドット(.)に置換しません。



 半角数字を全角数字に置換します。

 半角ドット(.)を全角ドット(.)に置換します

 ただし、チェックを外せば、半角数字を全角数字に置換しませんし、半角ドット(.)を全角ドット(.)に置換しません。



 半角英字を全角英字に置換します。

 半角ドット(.)を全角ドット(.)に置換します

 ただし、チェックを外せば、半角英字を全角英字に置換しませんし、半角ドット(.)を全角ドット(.)に置換しません。



 2024年2月19日の時点の最新のChromeとFirefoxで動作を確認しました。


 コピペする場合は、2文字の全角空白を4文字の半角空白に置換してください。


 JaNovelFormatter.htmlなどの適当な名前の空の.htmlファイルの内容にコピペしてから、UTF-8という文字コードで保存し、ChromeやFirefoxといったブラウザで.htmlファイルを見ると、利用できます。


JaNovelFormatter.html

――――――――――――――――――――

<!DOCTYPE html>

<html lang="ja">

  <head>

    <meta charset="UTF-8" />

    <title>日本の小説の規則で文を直す</title>


    <!-- Public Domain -->


  </head>

  <body>

    <div>

      <textarea id="originalText" cols="80" rows="10" placeholder="日本の小説の書き方の規則(ルール)で直したい文をここに記入してください。"></textarea>

    </div>

    <br />

    <div>

      <input type="checkbox" id="toKanjiNumerals" checked="checked" />半角数字と全角数字を漢数字に置換。半角ドット(.)を全角ドット(.)に置換。

    </div>

    <br />

    <div>

      <input type="checkbox" id="toFullWidthNumerics" />半角数字を全角数字に置換。半角ドット(.)を全角ドット(.)に置換。

    </div>

    <br />

    <div>

      <input type="checkbox" id="toFullWidthAlphabet" checked="checked" />半角英字を全角英字に置換。半角ドット(.)を全角ドット(.)に置換。

    </div>

    <br />

    <div>

      <button type="button" id="format">日本の小説の規則(ルール)で文を直す</button>

    </div>

    <br />

    <div>

      <textarea id="formattedText" cols="80" rows="10" placeholder="日本の小説の書き方の規則(ルール)で直された文がここに書き込まれます。"></textarea>

    </div>

    <div>

      <button type="button" id="copy">クリップボードにコピーする</button>

    </div>

    <br />

    <br />

    <div>

      <button type="button" id="clear">文を消去する</button>

    </div>

    <br />

    <br />

    <p> 不具合が有るかもしれないので、利用は自己責任で御願いいたします。</p>

    <br />

    <br />

    <p> 読点(、)や句点(。)の後以外で改行している場合は正しく整形できません。</p>

    <br />

    <br />

    <p> 整形後、目視で自分で見直してください。</p>

    <br />

    <br />

    <p> チェック ボックスにチェックすると、半角ドットを全角ドットに置換しますが、半角ドット以外の半角記号は全角には置換しません。</p>

    <br />

    <p> 縦書き表示すると、半角記号が不自然に表示される場合が有ります。</p>

    <br />

    <br />

    <p> 各行の最初が1文字以上の全角空白や半角空白の連続の場合は1文字だけの全角空白の字下げに置換します。</p>

    <br />

    <p> 各行の最後が1文字以上の全角空白や半角空白の連続の場合は除去します。</p>

    <br />

    <p> 各行の最初の文字が全角空白でも「でもない場合は全角空白で字下げします。</p>

    <br />

    <br />

    <p> 1つだけの…を2つの……に置換します。</p>

    <p> 3つだけの………を4つの…………に置換します。</p>

    <p> 5つだけの……………を6つの………………に置換します。</p>

    <br />

    <p> ただし、7つ以上の奇数の…………………などは、偶数に置換しても、奇数と偶数を見分けるのが困難なので、置換しません。</p>

    <br />

    <br />

    <p> 1つだけの―を2つの――に置換します。</p>

    <p> 3つだけの―――を4つの――――に置換します。</p>

    <p> 5つだけの―――――を6つの――――――に置換します。</p>

    <br />

    <p> ただし、7つ以上の奇数の―――――――などは、偶数に置換しても、奇数と偶数を見分けるのが困難なので、置換しません。</p>

    <br />

    <br />

    <p> 会話文の、改行の後の半角空白か全角空白の連続と、改行を除去します。</p>

    <br />

    <br />

    <p> 会話文の後に地の文が繋がっていて混在している文は、全角空白で字下げします。</p>

    <br />

    <br />

    <p> 。」を」に置換します。</p>

    <p> 。』を』に置換します。</p>

    <br />

    <br />

    <p> 」や』の前の1文字以上の半角空白や全角空白の連続を除去します。</p>

    <br />

    <br />

    <p> 全角の?か全角の!の次が全角空白でも全角の?でも全角の!でも」でも』でも(でも)でも改行でもない場合は全角空白を挿入します。</p>

    <br />

    <br />

    <p> 。の後の半角空白や全角空白の連続を除去します。</p>

    <br />

    <br />

    <p> 、改行の後の半角空白や全角空白の連続を除去します。</p>

    <br />

    <br />

    <p> 半角数字と全角数字を漢数字に置換します。</p>

    <br />

    <p> 半角ドット(.)を全角ドット(.)に置換します。</p>

    <br />

    <p> ただし、整数部が千垓の十倍以上の数に相当する25文字以上の数字の場合は、〇から九までの漢数字の羅列に置換します。</p>

    <br />

    <p> ただし、整数部が2文字以上の数字で第1文字目が半角数字のゼロ(0)か全角数字のゼロ(0)の場合は、〇から九までの漢数字の羅列に置換します。</p>

    <br />

    <p> ただし、1文字だけの半角数字ゼロ(0)や全角数字ゼロ(0)を零に置換します。</p>

    <br />

    <p> ただし、チェックを外せば、半角数字と全角数字を漢数字に置換しませんし、半角ドット(.)を全角ドット(.)に置換しません。</p>

    <br />

    <br />

    <p> 半角数字を全角数字に置換します。</p>

    <br />

    <p> 半角ドット(.)を全角ドット(.)に置換します。</p>

    <br />

    <p> ただし、チェックを外せば、半角数字を全角数字に置換しませんし、半角ドット(.)を全角ドット(.)に置換しません。</p>

    <br />

    <br />

    <p> 半角英字を全角英字に置換します。</p>

    <br />

    <p> 半角ドット(.)を全角ドット(.)に置換します。</p>

    <br />

    <p> ただし、チェックを外せば、半角英字を全角英字に置換しませんし、半角ドット(.)を全角ドット(.)に置換しません。</p>





    <script>



function $(id) {

  return document.getElementById(id);

}



$("toKanjiNumerals").onclick = function () {

  if ($("toFullWidthNumerics").checked) {

    $("toFullWidthNumerics").checked = false;

  }

};



$("toFullWidthNumerics").onclick = function () {

  if ($("toKanjiNumerals").checked) {

    $("toKanjiNumerals").checked = false;

  }

};





//正規表現の特殊文字をエスケープ

function escapeRegExp(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  string = string.replaceAll(/\\/g, "\\\\");

  string = string.replaceAll(/\./g, "\\.");

  string = string.replaceAll(/\?/g, "\\?");

  string = string.replaceAll(/\*/g, "\\*");

  string = string.replaceAll(/\+/g, "\\+");

  string = string.replaceAll(/\{/g, "\\{");

  string = string.replaceAll(/\}/g, "\\}");

  string = string.replaceAll(/\^/g, "\\^");

  string = string.replaceAll(/\$/g, "\\$");

  string = string.replaceAll(/\[/g, "\\[");

  string = string.replaceAll(/\]/g, "\\]");

  string = string.replaceAll(/\|/g, "\\|");

  string = string.replaceAll(/\(/g, "\\(");

  string = string.replaceAll(/\)/g, "\\)");


  return string;

}





//半角英字を全角英字に置換

function toFullWidthAlphabet(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  //半角英小文字を全角英小文字に置換

  string = string.replaceAll(/a/g, "a");

  string = string.replaceAll(/b/g, "b");

  string = string.replaceAll(/c/g, "c");

  string = string.replaceAll(/d/g, "d");

  string = string.replaceAll(/e/g, "e");

  string = string.replaceAll(/f/g, "f");

  string = string.replaceAll(/g/g, "g");

  string = string.replaceAll(/h/g, "h");

  string = string.replaceAll(/i/g, "i");

  string = string.replaceAll(/j/g, "j");

  string = string.replaceAll(/k/g, "k");

  string = string.replaceAll(/l/g, "l");

  string = string.replaceAll(/m/g, "m");

  string = string.replaceAll(/n/g, "n");

  string = string.replaceAll(/o/g, "o");

  string = string.replaceAll(/p/g, "p");

  string = string.replaceAll(/q/g, "q");

  string = string.replaceAll(/r/g, "r");

  string = string.replaceAll(/s/g, "s");

  string = string.replaceAll(/t/g, "t");

  string = string.replaceAll(/u/g, "u");

  string = string.replaceAll(/v/g, "v");

  string = string.replaceAll(/w/g, "w");

  string = string.replaceAll(/x/g, "x");

  string = string.replaceAll(/y/g, "y");

  string = string.replaceAll(/z/g, "z");


  //半角英大文字を全角英大文字に置換

  string = string.replaceAll(/A/g, "A");

  string = string.replaceAll(/B/g, "B");

  string = string.replaceAll(/C/g, "C");

  string = string.replaceAll(/D/g, "D");

  string = string.replaceAll(/E/g, "E");

  string = string.replaceAll(/F/g, "F");

  string = string.replaceAll(/G/g, "G");

  string = string.replaceAll(/H/g, "H");

  string = string.replaceAll(/I/g, "I");

  string = string.replaceAll(/J/g, "J");

  string = string.replaceAll(/K/g, "K");

  string = string.replaceAll(/L/g, "L");

  string = string.replaceAll(/M/g, "M");

  string = string.replaceAll(/N/g, "N");

  string = string.replaceAll(/O/g, "O");

  string = string.replaceAll(/P/g, "P");

  string = string.replaceAll(/Q/g, "Q");

  string = string.replaceAll(/R/g, "R");

  string = string.replaceAll(/S/g, "S");

  string = string.replaceAll(/T/g, "T");

  string = string.replaceAll(/U/g, "U");

  string = string.replaceAll(/V/g, "V");

  string = string.replaceAll(/W/g, "W");

  string = string.replaceAll(/X/g, "X");

  string = string.replaceAll(/Y/g, "Y");

  string = string.replaceAll(/Z/g, "Z");


  return string;

}





//半角数字を全角数字に置換

function toFullWidthNumerics(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  //半角数字を全角数字に置換

  string = string.replaceAll(/0/g, "0");

  string = string.replaceAll(/1/g, "1");

  string = string.replaceAll(/2/g, "2");

  string = string.replaceAll(/3/g, "3");

  string = string.replaceAll(/4/g, "4");

  string = string.replaceAll(/5/g, "5");

  string = string.replaceAll(/6/g, "6");

  string = string.replaceAll(/7/g, "7");

  string = string.replaceAll(/8/g, "8");

  string = string.replaceAll(/9/g, "9");


  return string;

}





//半角ドット(.)を全角ドット(.)に置換

function toFullWidthDot(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  //半角ドット(.)を全角ドット(.)に置換

  string = string.replaceAll(/\./g, ".");


  return string;

}





//半角数字を漢数字ゼロ(〇)から九までの漢数字の羅列に置換

function toSingleKanjiNumerals(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  string = string.replaceAll(/0/g, "〇");

  string = string.replaceAll(/1/g, "一");

  string = string.replaceAll(/2/g, "二");

  string = string.replaceAll(/3/g, "三");

  string = string.replaceAll(/4/g, "四");

  string = string.replaceAll(/5/g, "五");

  string = string.replaceAll(/6/g, "六");

  string = string.replaceAll(/7/g, "七");

  string = string.replaceAll(/8/g, "八");

  string = string.replaceAll(/9/g, "九");


  return string;

}



//半角数字と全角数字(の整数部)を漢数字に置換

//

//ただし、千垓の十倍以上の数に相当する25文字以上の数字の場合は、漢数字ゼロ(〇)から九までの漢数字の羅列に置換

//

//また、2文字以上の数字で第1文字目が半角数字のゼロ(0)の場合も、漢数字ゼロ(〇)から九までの漢数字の羅列に置換

//

function toIntegralKanjiNumerals(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  //全角数字を半角数字に置換して、半角数字だけに統一

  string = string.replaceAll(/0/g, "0");

  string = string.replaceAll(/1/g, "1");

  string = string.replaceAll(/2/g, "2");

  string = string.replaceAll(/3/g, "3");

  string = string.replaceAll(/4/g, "4");

  string = string.replaceAll(/5/g, "5");

  string = string.replaceAll(/6/g, "6");

  string = string.replaceAll(/7/g, "7");

  string = string.replaceAll(/8/g, "8");

  string = string.replaceAll(/9/g, "9");


  //半角数字の1文字以上の連続を抽出

  var numericsArray = string.match(/[0-9]+/g);


  //半角数字の1文字以上の連続が無い場合

  if (numericsArray == null) {

    return string;

  }


  //置換の重複を予防するため、文字数が大きい数字から小さい数字へ並べます。

  var compare = function (a, b) {

    return b.length - a.length;

  };

  numericsArray.sort(compare);


  var kanjiNumeralsArray = [];


  for (var index = 0; index < numericsArray.length; index++) {

    var numerics = numericsArray[index];


    var numericsLength = numerics.length;


    var kanjiNumerals = "";


    //千垓の十倍以上の数に相当する25文字以上の数字の場合

    //、または、

    //2文字以上の数字で第1文字目が半角数字のゼロ(0)の場合

    //

    if (25 <= numericsLength || (2 <= numericsLength && numerics.startsWith("0"))) {

      //〇から九までの漢数字の羅列に置換

      for (var i = 0; i < numericsLength; i++) {

        kanjiNumerals = kanjiNumerals + toSingleKanjiNumerals(numerics.charAt(i));

      }

      kanjiNumeralsArray.push(kanjiNumerals);

      continue;

    }


    for (var i = 0; i < numericsLength; i++) {

      kanjiNumerals = kanjiNumerals + toSingleKanjiNumerals(numerics.charAt(i));

      switch (numericsLength - i) {

        case 24:

        case 20:

        case 16:

        case 12:

        case 8:

        case 4:

          kanjiNumerals = kanjiNumerals + "千";

          break;

        case 23:

        case 19:

        case 15:

        case 11:

        case 7:

        case 3:

          kanjiNumerals = kanjiNumerals + "百";

          break;

        case 22:

        case 18:

        case 14:

        case 10:

        case 6:

        case 2:

          kanjiNumerals = kanjiNumerals + "十";

          break;

        case 21:

          kanjiNumerals = kanjiNumerals + "垓";

          break;

        case 17:

          kanjiNumerals = kanjiNumerals + "京";

          break;

        case 13:

          kanjiNumerals = kanjiNumerals + "兆";

          break;

        case 9:

          kanjiNumerals = kanjiNumerals + "億";

          break;

        case 5:

          kanjiNumerals = kanjiNumerals + "万";

          break;

        default:

          break;

      }

    }


    //kanjiNumerals = kanjiNumerals.replaceAll(/^〇[垓京兆億万]/g, "");

    kanjiNumerals = kanjiNumerals.replaceAll(/〇([垓京兆億万])/g, "$1");


    kanjiNumerals = kanjiNumerals.replaceAll(/〇[千百十]/g, "");


    kanjiNumerals = kanjiNumerals.replaceAll(/^〇$/g, "零");

    kanjiNumerals = kanjiNumerals.replaceAll(/〇$/g, "");


    kanjiNumerals = kanjiNumerals.replaceAll(/一([千百十])/g, "$1");


    kanjiNumerals = kanjiNumerals.replaceAll(/垓[京兆億万]+/g, "垓");

    kanjiNumerals = kanjiNumerals.replaceAll(/京[兆億万]+/g, "京");

    kanjiNumerals = kanjiNumerals.replaceAll(/兆[億万]+/g, "兆");

    kanjiNumerals = kanjiNumerals.replaceAll(/億万/g, "億");


    kanjiNumeralsArray.push(kanjiNumerals);

  }


  for (var index = 0; index < numericsArray.length; index++) {

    var numerics = numericsArray[index];


    var kanjiNumerals = kanjiNumeralsArray[index];


    string = string.replaceAll(new RegExp(numerics, "g"), kanjiNumerals);

  }


  return string;

}





//半角ドット(.)か全角ドット(.)の後の半角数字と全角数字(の小数部)を漢数字ゼロ(〇)から九までの漢数字の羅列に置換

//

//半角数字と全角数字(の小数部)の前の半角ドット(.)を全角ドット(.)に置換

//

//半角数字と全角数字の前以外の全角ドット(.)を半角ドット(.)に置換してしまいます。

//

function toFractionalKanjiNumerals(string) {

  if (string == null) {

    return string;

  }

  if (string == "") {

    return string;

  }


  //全角数字を半角数字に置換して、半角数字だけに統一

  string = string.replaceAll(/0/g, "0");

  string = string.replaceAll(/1/g, "1");

  string = string.replaceAll(/2/g, "2");

  string = string.replaceAll(/3/g, "3");

  string = string.replaceAll(/4/g, "4");

  string = string.replaceAll(/5/g, "5");

  string = string.replaceAll(/6/g, "6");

  string = string.replaceAll(/7/g, "7");

  string = string.replaceAll(/8/g, "8");

  string = string.replaceAll(/9/g, "9");


  //全角ドット(.)を半角ドット(.)に置換して、半角ドット(.)に統一

  string = string.replaceAll(/./g, ".");


  //半角ドット(.)と半角数字の1文字以上の連続を抽出

  var dotAndNumericsArray = string.match(/\.[0-9]+/g);


  //半角ドット(.)と半角数字の1文字以上の連続が無い場合

  if (dotAndNumericsArray == null) {

    return string;

  }


  //置換の重複を予防するため、文字数が大きい数字から小さい数字へ並べます。

  var compare = function (a, b) {

    return b.length - a.length;

  };

  dotAndNumericsArray.sort(compare);


  //半角ドット(.)を除去して、半角数字の1文字以上の連続だけにします。

  var numericsArray = [];

  for (var index = 0; index < dotAndNumericsArray.length; index++) {

    var dotAndNumerics = dotAndNumericsArray[index];


    var numerics = dotAndNumerics.replace(/^\./, "");


    numericsArray.push(numerics);

  }


  var kanjiNumeralsArray = [];


  for (var index = 0; index < numericsArray.length; index++) {

    var numerics = numericsArray[index];


    //〇から九までの漢数字の羅列に置換

    var kanjiNumerals = "";

    for (var i = 0; i < numerics.length; i++) {

      kanjiNumerals = kanjiNumerals + toSingleKanjiNumerals(numerics.charAt(i));

    }

    kanjiNumeralsArray.push(kanjiNumerals);

  }


  for (var index = 0; index < numericsArray.length; index++) {

    var numerics = numericsArray[index];


    var kanjiNumerals = kanjiNumeralsArray[index];


    string = string.replaceAll(new RegExp("\\." + numerics, "g"), "." + kanjiNumerals);

  }


  return string;

}





$("format").onclick = function () {


  var text = $("originalText").value;


  var formattingLineArray = [];


  text = text.replaceAll(/\r\n/g, "\n");

  text = text.replaceAll(/\r/g, "\n");

  var lineArray = text.split("\n");

  for (var i = 0; i < lineArray.length; i++) {

    var line = lineArray[i];



    //各行の最初が1文字以上の全角空白や半角空白の連続の場合は1文字だけの全角空白の字下げに置換

    line = line.replaceAll(/^[  ]+/g, " ");



    //各行の最後が1文字以上の全角空白や半角空白の連続の場合は除去

    line = line.replaceAll(/[  ]+$/g, "");



    //各行の最初の文字が全角空白でも「でもない場合は全角空白で字下げ

    line = line.replaceAll(/^([^ 「])/g, " $1");



    //奇数の…を偶数の……に置換


    //1つだけの…を2つの……に置換

    line = line.replaceAll(/([^…])…$/g, "$1……");

    line = line.replaceAll(/([^…])…([^…])/g, "$1……$2");


    //3つだけの………を4つの…………に置換

    line = line.replaceAll(/([^…])………$/g, "$1…………");

    line = line.replaceAll(/([^…])………([^…])/g, "$1…………$2");


    //5つだけの……………を6つの………………に置換

    line = line.replaceAll(/([^…])……………$/g, "$1………………");

    line = line.replaceAll(/([^…])……………([^…])/g, "$1………………$2");



    //奇数の全角ダッシュ記号(―)を偶数の全角ダッシュ記号(――)に置換


    //1つだけの―を2つの――に置換

    line = line.replaceAll(/([^―])―$/g, "$1――");

    line = line.replaceAll(/([^―])―([^―])/g, "$1――$2");


    //3つだけの―――を4つの――――に置換

    line = line.replaceAll(/([^―])―――$/g, "$1――――");

    line = line.replaceAll(/([^―])―――([^―])/g, "$1――――$2");


    //5つだけの―――――を6つの――――――に置換

    line = line.replaceAll(/([^―])―――――$/g, "$1――――――");

    line = line.replaceAll(/([^―])―――――([^―])/g, "$1――――――$2");



    if ($("toFullWidthAlphabet").checked) {


      //半角英字を全角英字に置換

      line = toFullWidthAlphabet(line);


      //半角ドット(.)を全角ドット(.)に置換

      line = toFullWidthDot(line);

    }



    if ($("toKanjiNumerals").checked) {


      //半角ドット(.)か全角ドット(.)の後の半角数字と全角数字(の小数部)を漢数字ゼロ(〇)から九までの漢数字の羅列に置換

      //

      //半角数字と全角数字(の小数部)の前の半角ドット(.)を全角ドット(.)に置換

      //

      //半角数字と全角数字の前以外の全角ドット(.)を半角ドット(.)に置換してしまいます。

      //

      line = toFractionalKanjiNumerals(line);


      //半角数字と全角数字(の整数部)を漢数字に置換

      //

      //ただし、千垓の十倍以上の数に相当する25文字以上の数字の場合は、漢数字ゼロ(〇)から九までの漢数字の羅列に置換

      //

      //また、2文字以上の数字で第1文字目が半角数字のゼロ(0)の場合も、漢数字ゼロ(〇)から九までの漢数字の羅列に置換

      //

      line = toIntegralKanjiNumerals(line);


      //零.を〇.に置換

      line = line.replaceAll(/零./g, "〇.");


      //半角ドット(.)を全角ドット(.)に置換

      line = toFullWidthDot(line);


    } else if ($("toFullWidthNumerics").checked) {


      //半角数字を全角数字に置換

      line = toFullWidthNumerics(line);


      //半角ドット(.)を全角ドット(.)に置換

      line = toFullWidthDot(line);

    }



    formattingLineArray.push(line);

  }

  var formattingText = formattingLineArray.join("\n");



  //会話文を抽出

  //

  //「から」までを抽出

  //

  var dialogArray = formattingText.match(/「[^」]*」/g);

  //会話文が存在する場合

  if (dialogArray != null) {

    //会話文の数だけ、くり返し

    for (var index = 0; index < dialogArray.length; index++) {

      var dialog = dialogArray[index];


      //会話文の、改行の後の半角空白か全角空白の連続と、改行を除去

      formattingText = formattingText.replaceAll(new RegExp(escapeRegExp(dialog), "g"), dialog.replaceAll(/[\r\n][  ]+/g, "").replaceAll(/[\r\n]/g, ""));

    }

  }



  //会話文の後に地の文が繋がっていて混在している文を抽出


  var dialogAndDescriptionArray = formattingText.match(/[\r\n]「[^」]*」[^\r\n]+|^「[^」]*」[^\r\n]+/g);

  //会話文の後に地の文が繋がっていて混在している文が存在する場合

  if (dialogAndDescriptionArray != null) {

    //会話文の後に地の文が繋がっていて混在している文の数だけ、くり返し

    for (var index = 0; index < dialogAndDescriptionArray.length; index++) {

      var dialogAndDescription = dialogAndDescriptionArray[index];


      //会話文の後に地の文が繋がっていて混在している文は、全角空白で字下げ

      formattingText = formattingText.replaceAll(new RegExp(escapeRegExp(dialogAndDescription), "g"), dialogAndDescription.replaceAll(/^([\r\n]?)「/g, "$1 「"));

    }

  }



  //」や』の前の1文字以上の半角空白や全角空白の連続を除去

  formattingText = formattingText.replaceAll(/[  ]+([」』])/g, "$1");



  //。」を」に置換

  //。』を』に置換

  formattingText = formattingText.replaceAll(/。([」』])/g, "$1");



  //全角の?か全角の!の次が全角空白でも全角の?でも全角の!でも」でも』でも(でも)でも改行でもない場合は全角空白を挿入

  formattingText = formattingText.replaceAll(/([?!])([^ ?!」』\(\)\r\n])/g, "$1 $2");



  //。の後の半角空白や全角空白の連続を除去

  formattingText = formattingText.replaceAll(/。[  ]+/g, "。");



  //、改行の後の半角空白や全角空白の連続を除去

  formattingText = formattingText.replaceAll(/(、\n)[  ]+/g, "$1");



  $("formattedText").value = formattingText;

};



$("copy").onclick = function () {

  navigator.clipboard.writeText($("formattedText").value);

};



$("clear").onclick = function () {

  $("originalText").value = "";

  $("formattedText").value = "";

};



    </script>

  </body>

</html>

――――――――――――――――――――

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る