コメントいただいた方のオブジェクトで囲う方が
良さそうだったので参考にして作りました
const converter = {
KATA_F: 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ'
+'マミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
+'ガ゛ギ|グ|ゲ|ゴ|ザ|ジ|ズ|ゼ|ゾ|ダ|ヂ|ヅ|デ|ド|'
+'バ|ビ|ブ|ベ|ボ|パ゜ピ|プ|ペ|ポ|ヴ|ヷ|ヺ',
KATA_H: 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
+'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ',
KATA_H_RE: /[ヲウカ-トワ]゙?|[ハ-ホ][゙゚]?|[。-・ァ-オナ-ノマ-ロン゙゚]/g,
//functions
kataH2F: function(text){
return text.replace(this.KATA_H_RE, m => this.KATA_F[this.KATA_H.indexOf(m)])
},
}
console.log(converter.kataH2F('ア゙ア゚アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
+'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ'))
──────────────────
より簡素に
さすがに正規表現が雑だったので修正
const S_KATA = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
+'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ'
const D_KATA = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ'
+'マミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
+'ガ゛ギ|グ|ゲ|ゴ|ザ|ジ|ズ|ゼ|ゾ|ダ|ヂ|ヅ|デ|ド|'
+'バ|ビ|ブ|ベ|ボ|パ゜ピ|プ|ペ|ポ|ヴ|ヷ|ヺ'
const RE_S_KATA = /[ヲウカ-トワ]゙?|[ハ-ホ][゙゚]?|[。-・ァ-オナ-ノマ-ロン゙゚]/g
const toZenKata = text =>
text.replace(RE_S_KATA, m => D_KATA[S_KATA.indexOf(m)])
修正箇所
const S_KATA = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
+'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ'
const D_KATA = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ'
+'マミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・'
- +'ガ|ギ|グ|ゲ|ゴ|ザ|ジ|ズ|ゼ|ゾ|ダ|ヂ|ヅ|デ|ド|'
+ +'ガ゛ギ|グ|ゲ|ゴ|ザ|ジ|ズ|ゼ|ゾ|ダ|ヂ|ヅ|デ|ド|'
- +'バ|ビ|ブ|ベ|ボ|パ|ピ|プ|ペ|ポ|ヴ|ヷ|ヺ'
+ +'バ|ビ|ブ|ベ|ボ|パ゜ピ|プ|ペ|ポ|ヴ|ヷ|ヺ'
+const RE_S_KATA = /[ヲウカ-トワ]゙?|[ハ-ホ][゙゚]?|[。-・ァ-オナ-ノマ-ロン゙゚]/g
const toZenKata = text =>
- text.replace(/[。-ン][゙゚]?/g, m =>
+ text.replace(RE_S_KATA, m =>
D_KATA[S_KATA.indexOf(m)]
- || D_KATA[S_KATA.indexOf(m[0])]+(m[1]==='゙' ? '゛' : '゜'))