Note to Self

自分用のメモ置き場

JavaScriptで濁音・半濁音を清音と濁点・半濁点に分解する

全銀フォーマットでは濁点・半濁点も1文字とカウントするため分離する必要がある
他にもいい方法があるかもしれないが、手っ取り早く分離しておく

function divideCharacter(rawTxt) {
  const arrReplaceData = [
    ['ガ', 'カ゛'],
    ['ギ', 'キ゛'],
    ['グ', 'ク゛'],
    ['ゲ', 'ケ゛'],
    ['ゴ', 'コ゛'],
    ['ザ', 'サ゛'],
    ['ジ', 'シ゛'],
    ['ズ', 'ス゛'],
    ['ゼ', 'セ゛'],
    ['ゾ', 'ソ゛'],
    ['ダ', 'タ゛'],
    ['ヂ', 'チ゛'],
    ['ヅ', 'ツ゛'],
    ['デ', 'テ゛'],
    ['ド', 'ト゛'],
    ['バ', 'ハ゛'],
    ['ビ', 'ヒ゛'],
    ['ブ', 'フ゛'],
    ['ベ', 'ヘ゛'],
    ['ボ', 'ホ゛'],
    ['パ', 'ハ゜'],
    ['ピ', 'ヒ゜'],
    ['プ', 'フ゜'],
    ['ペ', 'ヘ゜'],
    ['ポ', 'ホ゜']
  ];

  if (rawTxt.length > 0) {
    for (let i = 0; i < arrReplaceData.length; i++) {
      let replaceData = arrReplaceData[i];
      rawTxt = rawTxt.replace(new RegExp(replaceData[0], 'g'), function() {
        return replaceData[1];
      });
    }
  }
  //return rawTxt;
  console.log(rawTxt);
}

// 動作結果
divideCharacter('ガギグゲゴ'); // カ゛キ゛ク゛ケ゛コ゛
divideCharacter('ザジズゼゾ'); // サ゛シ゛ス゛セ゛ソ゛
divideCharacter('ダヂヅデド'); // タ゛チ゛ツ゛テ゛ト゛
divideCharacter('バビブベボ'); // ハ゛ヒ゛フ゛ヘ゛ホ゛
divideCharacter('アイウエオ'); // アイウエオ
divideCharacter('パピプペポ'); // ハ゜ヒ゜フ゜ヘ゜ホ゜