Hangul.js
March 27, 2025 Β· View on GitHub
π μ μ§λ³΄μ 곡μ§
νμ¬ μ΄ νλ‘μ νΈλ μ΅μνμ μ μ§λ³΄μ μνλ‘ μ νλμμ΅λλ€. μ½λλ μ¬μ ν μλνμ§λ§, κ°λ° λ° μ λ°μ΄νΈκ° μ€λ¨λ μνμ λλ€.
μΆμ² λμ: λ νλ°νκ² κ΄λ¦¬λλ μ루μ μ μ°ΎμΌμλ λΆλ€μ es-hangulμ νμΈν΄ 보μκΈ° λ°λλλ€. ν΄λΉ νλ‘μ νΈλ μ‘°μ¬ μΈ λ€λ₯Έ νκΈ κ΄λ ¨ κΈ°λ₯λ€λ μ 곡νκ³ μμ΅λλ€.
ν₯ν κ³ν: μΆνμ κ°λ°μ μ¬κ°ν μ μμ§λ§, νμ¬λ‘μλ μ¬μ©μλΆλ€μ΄ νμμ κ°μ₯ μ ν©ν λꡬλ₯Ό μ¬μ©νμ€ μ μλλ‘ μλ΄ν΄ λλ¦¬κ³ μ ν©λλ€. μ΄ μ μ₯μλ μ°Έκ³ λ° κΈ°λ‘ μ©λλ‘ κ³μ μ μ§λ μμ μ λλ€. νμ¬ μ΄ νλ‘μ νΈλ₯Ό μ¬μ© μ€μ΄μκ³ νμλ₯Ό μΆ©μ‘±νκ³ κ³μλ€λ©΄ κ³μ μ¬μ©νμ€ μ μμ΅λλ€. λ€λ§, μλ‘κ² λμ νλ € νμ λ€λ©΄ μμμ μΈκΈν λμμ κ²ν ν΄ λ³΄μκΈ°λ₯Ό μΆμ²λ립λλ€.
κ·Έλμ μ΄ νλ‘μ νΈλ₯Ό μ§μνκ³ κΈ°μ¬ν΄ μ£Όμ λͺ¨λ λΆλ€κ» κ°μ¬λ립λλ€.
Maintenance Notice: This project is currently in a low-maintenance state. For new implementations, we recommend checking out es-hangul which is actively maintained and offers more features. This repository will remain available for reference.
Hangul.js
Hangul.jsλ νκΈλ‘ μ΄λ£¨μ΄μ§ λ¬Έμ₯μ μμκ³Ό λͺ¨μμ λΆλ¦¬νλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬μ λλ€. μλͺ¨ λΆλ¦¬ λλ μ΄μ± κ²μμ μ¬μ©ν μ μμ΅λλ€.
μ€μΉ λ° μ¬μ©λ°©λ²
node.js
npm install hangul-js
const Hangul = require('hangul-js');
TypeScript
npm install hangul-js
import * as Hangul from 'hangul-js';
μΌλ° μΉ νμ΄μ§
μΉ νμ΄μ§μμ μ¬μ©νλ €λ©΄ hangul.js νμΌμ <script>νκ·Έλ₯Ό μ΄μ©νμ¬ μ½μ
ν©λλ€. AMD ν¨ν΄μΌλ‘ λΆλ¬μ¬ μλ μμ΅λλ€.
<script src="hangul.js" type="text/javascript"></script>
<!-- or from CDN -->
<script src="https://unpkg.com/hangul-js" type="text/javascript"></script>
μλ°μ€ν¬λ¦½νΈ μ½λμμ μ μμ λ ΈμΆλ Hangulμ΄λΌλ κ°μ²΄λ₯Ό ν΅ν΄ μ κ·Όν μ μμ΅λλ€.
Hangul // window.Hangul
λͺ μΈ
Hangul.disassemble (alias Hangul.d)
Hangul.disassemble(str:string, grouped:boolean = false)μ λ¬Έμμ΄ strμ μλ νκΈμ μμ/λͺ¨μμΌλ‘ λΆλ¦¬νμ¬ λ¬Έμλ€μ λ°°μ΄λ‘ λλ €μ€λλ€. μ΄ λ νκΈμ΄ μλ λ¬Έμλ κ·Έλλ‘ λ°νλ©λλ€. Hangul.dμ²λΌ μ§§μ μ΄λ¦μΌλ‘ μ¬μ©ν μλ μμ΅λλ€.
Hangul.disassemble('κ°λλ€'); // ['γ±','γ
','γ΄','γ
','γ·','γ
']
Hangul.disassemble('abκ°c'); // ['a','b','γ±','γ
','c']
Hangul.disassemble('ab@!23X.'); // ['a','b','@','!','2','3','X','.']
κ°μ νλ±μλ‘ μ΄λ£¨μ΄μ§ κ²Ήλ±μλ λΆλ¦¬λμ§ μμ΅λλ€.
Hangul.disassemble('γ²'); // ['γ²']
λ€λ₯Έ νλ±μλ‘ μ΄λ£¨μ΄μ§ κ²Ήλ±μλ λΆλ¦¬λ©λλ€.
Hangul.disassemble('γ³'); // ['γ±','γ
']
Hangul.disassemble('γ
'); // ['γ
','γ
£']
μΆκ°μ μΌλ‘ grouped μ΅μ
μ trueλ‘ μ€μ νμ¬ λ¬Έμμ΄μ κ° κΈμλ³λ‘ λ°λ‘ λΆλ¦¬ν μ μμ΅λλ€.
Hangul.d('λ§€λμΊ£MK2', true);
// [['γ
', 'γ
'], ['γ·', 'γ
‘'], ['γ
', 'γ
', 'γ
'], ['M'], ['K'], ['2']]
μλμ°μμ λλ²μ ν€λ³΄λλ‘ μ£Όμ΄μ§ λ¬Έμμ΄μ μ λ ₯ν λ λλ₯΄λ ν€λ€μ λ°°μ΄μ΄λΌκ³ μκ°νλ©΄ μ½μ΅λλ€.
Hangul.assemble (alias Hangul.a)
Hangul.assemble(arr:string[])λ νκΈ μμ/λͺ¨μλ€μ λ°°μ΄ arrμ μΈμλ‘ λ°μ μ΄λ₯Ό μ‘°ν©ν λ¬Έμμ΄μ λλ €μ€λλ€. μ΄ λ νκΈμ΄ μλ λ¬Έμλ κ·Έλλ‘ λ°νλ©λλ€. Hangul.aμ²λΌ μ§§μ μ΄λ¦μΌλ‘ μ¬μ©ν μλ μμ΅λλ€.
Hangul.assemble(['γ±','γ
','γ΄','γ
','γ·','γ
']); // 'κ°λλ€'
Hangul.assemble(['a','b','γ±','γ
','c']); // 'abκ°c'
Hangul.assemble(['a','b','@','!','2','3','X','.']); // 'ab@!23X.'
μ΄ κ²½μ°μλ λλ²μ ν€λ³΄λμμ μ£Όμ΄μ§ ν€λ€μ λλ₯Ό λ λ§λ€μ΄μ§λ λ¬Έμμ΄μ λλ €μ€λ€κ³ μκ°νλ©΄ μ½μ΅λλ€.
Hangul.assemble(['γ
','γ
']); // 'γ
'
Hangul.assemble(['γΉ','γ
','γ
']); // 'γΌγ
'
Hangul.disassemble ν¨μμ μν¨μ κ΄κ³κ° μλμ μ£ΌμνμΈμ.
Hangul.a(Hangul.d('μ½γ
')); // 'μ€ν' ('μ½γ
' κ° μλ)
Hangul.search
Hangul.search(a:string, b:string)λ λ¬Έμμ΄ aκ° λ¬Έμμ΄ bλ₯Ό ν¬ν¨νλμ§ κ²μ¬ν©λλ€. μ΄λ ν¬ν¨κ΄κ³λ 'λλ²μ ν€λ³΄λ κΈ°μ€μΌλ‘ aλ¬Έμμ΄μ μ
λ ₯ν λ λλ₯΄λ ν€λ€μ λ°°μ΄μ΄ bλ¬Έμμ΄μ μ
λ ₯ν λ λλ₯΄λ ν€λ€μ λ°°μ΄μ ν¬ν¨νλ€'λ‘ μ μν©λλ€. λ°νκ°μ΄ 0λ³΄λ€ ν¬κ±°λ κ°λ€λ©΄ ν¬ν¨ν©λλ€.
Hangul.search('λ¬κ±','λ'); // 0
Hangul.search('λ¬κ±','μ'); // -1
indexOfν¨μμ λ€λ¦
λλ€.
let a = 'λμ°λ―Έ'
, b = 'λμ';
a.indexOf(b); // -1
Hangul.search(a, b); // 0
μ€μ μ¬μ©ν λμλ νλμ λ¨μ΄λ₯Ό μ¬λ¬κ°μ λ¬Έμμ΄κ³Ό λΉκ΅νλ―λ‘ Hangul.Searcherλ₯Ό μ¬μ©νλκ² νΈν©λλ€. λ΄λΆμ μΌλ‘ νλ²λ§ μλͺ¨ λΆλ¦¬λ₯Ό μννλ―λ‘ ν¨μ¨μ μ
λλ€.
let searcher = new Hangul.Searcher('λ');
searcher.search('λ¬κ±'); // 0
searcher.search('λ¬κ΅¬μ§'); // 0
searcher.search('λ¬λ¬΄λ¦¬'); // -1
Hangul.rangeSearch
Hangul.rangeSearch(a:string, b:string)λ a λ¬Έμμ΄μμ b λ¬Έμμ΄μ λͺ¨λ μ°Ύκ³ μΌμΉνλ λ²μλ₯Ό a λ¬Έμμ΄ μμ μΈλ±μ€λ‘ λλ €μ€λλ€. λ§μ½ b λ¬Έμμ΄μ μ°Ύμ§ λͺ»νλ€λ©΄ λΉ λ°°μ΄μ λλ €μ€λλ€. κ²μ μμ€ν
μμ μΌμΉνλ λΆλΆμ κ°μ‘°νλ €κ³ ν λ μ μ©ν©λλ€.
let a = 'κ°μ₯곡μ₯곡μ₯μ₯',
b = '곡μ₯';
Hangul.rangeSearch(a, b); // [[2, 3], [4, 5]]
κΈ°ν νκΈ κ΄λ ¨ ν¨μ
μ΄ν ν¨μλ€μ μΈμλ‘ λ¬Έμλ₯Ό λ°μ΅λλ€. μλ°μ€ν¬λ¦½νΈμμλ λ¬Έμ νμ μ΄ μμΌλ―λ‘ λ¬Έμμ΄λ‘ λ체ν©λλ€. κΈΈμ΄κ° 2 μ΄μμΈ λ¬Έμμ΄μ κ²½μ° μ²« νκΈμμ λν΄ νλ¨ν©λλ€.
Hangul.isComplete(c)
μ£Όμ΄μ§ λ¬Έμκ° μμ±λ νκΈμΈμ§ μλμ§ νλ¨ν©λλ€. μμ±λ νκΈμ΄λ μ λμ½λλ‘ 'κ°'(0xAC00) ~ 'ν£'(0xD7A3) μ¬μ΄μ μλ λ¬Έμλ₯Ό λ§ν©λλ€. 'γ±', 'γ
' λ±μ μμ±λ νκΈμ΄ μλλλ€.
Hangul.isCompleteAll(str) ννλ‘ strμ λͺ¨λ λ¬Έμκ° μμ±λ νκΈμΈμ§ νλ¨ν μ μμ΅λλ€.
Hangul.isConsonant(c)
μ£Όμ΄μ§ λ¬Έμκ° μμμΈμ§ νλ¨ν©λλ€.
Hangul.isCosonantAll(str) ννλ‘ strμ λͺ¨λ λ¬Έμκ° μμμΈμ§ νλ¨ν μ μμ΅λλ€.
Hangul.isVowel(c)
μ£Όμ΄μ§ λ¬Έμκ° λͺ¨μμΈμ§ νλ¨ν©λλ€.
Hangul.isVowelAll(str) ννλ‘ strμ λͺ¨λ λ¬Έμκ° λͺ¨μμΈμ§ νλ¨ν μ μμ΅λλ€.
Hangul.isCho(c)
μ£Όμ΄μ§ λ¬Έμκ° μ΄μ±μΌλ‘ μ°μΌ μ μλμ§ νλ¨ν©λλ€. 'γ²'μ μ΄μ±μΌλ‘ μ°μΌ μ μμ§λ§ 'γ³'λ μ΄μ±μΌλ‘ μ°μΌ μ μμ΅λλ€.
Hangul.isChoAll(str) ννλ‘ strμ λͺ¨λ λ¬Έμκ° μ΄μ±μΈμ§ νλ¨ν μ μμ΅λλ€.
Hangul.isJong(c)
μ£Όμ΄μ§ λ¬Έμκ° μ’
μ±μΌλ‘ μ°μΌ μ μλμ§ νλ¨ν©λλ€. 'γ²'μ μ’
μ±μΌλ‘ μ°μΌ μ μμ§λ§ 'γΈ'λ μ’
μ±μΌλ‘ μ°μΌ μ μμ΅λλ€.
Hangul.isJongAll(str) ννλ‘ strμ λͺ¨λ λ¬Έμκ° μ’
μ±μΈμ§ νλ¨ν μ μμ΅λλ€.
Hangul.endsWithConsonant(c)
μ£Όμ΄μ§ λ¬Έμκ° μμμΌλ‘ λλλμ§ νλ¨ν©λλ€. λ°μΉ¨μ΄ μκ±°λ μμ νλκ° μΈμλ‘ μ£Όμ΄μ§λ©΄ trueλ₯Ό μλ κ²½μ° falseλ₯Ό λ°νν©λλ€. νκΈμ΄ μλ κ²½μ°λ falseλ₯Ό λ°νν©λλ€. μ/λ μ΄/κ° κ΅¬λΆμ μ¬μ©ν μ μμ΅λλ€.
Hangul.endsWith(c, t)
μ£Όμ΄μ§ λ¬Έμκ° t(νκ²)μΌλ‘ λλλμ§ νλ¨ν©λλ€. tλ‘ λλλ©΄ trueλ₯Ό μλ κ²½μ° falseλ₯Ό λ°νν©λλ€. λ‘/μΌλ‘ ꡬλΆμ μ¬μ©ν μ μμ΅λλ€.
μμ
μ¬κΈ°μ μ£Όμ΄μ§ λ¬Έμ₯μμ μμ¬μ리(γ±, γ·, γ , γ , γ )μ κ±°μΌμ리(γ , γ , γ , γ )λ₯Ό λμ리(γ², γΈ, γ , γ , γ )λ‘ λ°κΎΈλ μμ κ° μ€λΉλμ΄ μμ΅λλ€.
ν΅μ¬ μ½λλ λ€μκ³Ό κ°μ΅λλ€.
let input = 'μλ²μ§κ° λ°©μ λ€μ΄κ°μ λ€'
function stronger(x){
if(x == 'γ±' || x == 'γ
') return 'γ²';
if(x == 'γ·' || x == 'γ
') return 'γΈ';
if(x == 'γ
' || x == 'γ
') return 'γ
';
if(x == 'γ
') return 'γ
';
if(x == 'γ
' || x == 'γ
') return 'γ
';
return x;
}
console.log(Hangul.a(Hangul.d(input).map(stronger)));
// μλ»μ°κΉ λΉ΅μ λ°μ΄κΉμ¬λ°
ν μ€νΈ λ° κΈ°μ¬
μ½λλ₯Ό μμ νμ
¨λ€λ©΄ κΌ grunt λͺ
λ Ήμ΄λ₯Ό ν΅ν΄ ν
μ€νΈλ₯Ό μνν΄ μ£ΌμΈμ. νμ¬ λ§μ€ν° λΈλμΉμ μλ μ½λμ ν
μ€νΈ κ²°κ³Όλ https://e-.github.io/Hangul.js/test/μμ λ³΄μ€ μ μμ΅λλ€.