ìë°ì¤í¬ë¦½í¸ë 문ìì´ì ì ëì½ë ì¸ì½ë©ì ì¬ì©í©ëë¤. ëë¶ë¶ì 문ìë 2ë°ì´í¸ë¡ ì¸ì½ë©ëì´ìëë° 2ë°ì´í¸ë¡ë ìµë 65,536ê°ì ê¸ìë°ì ííí ì ììµëë¤.
65,536ìë 모ë ê¸ì를 ì¸ì½ë©í기ìë ë¶ì¡±í ì«ìì
ëë¤. ê·¸ëì ì¼ë¶ 문ìë 4ë°ì´í¸ë¡ ì¸ì½ë©ëì´ììµëë¤. ì를 ë¤ë©´ ð³(ìíìì ì¬ì©íë X)ë ð(ìë íì ), ì¼ë¶ ìí 문ì ë±ì´ ìì£ .
ë¤ìì ì¼ë¶ 문ìì ì ëì½ë ê°ì ëë¤.
| 문ì | ì ëì½ë | ì ëì½ëì ë°ì´í¸ ì |
|---|---|---|
| a | 0x0061 |
2 |
| â | 0x2248 |
2 |
| ð³ | 0x1d4b3 |
4 |
| ð´ | 0x1d4b4 |
4 |
| ð | 0x1f604 |
4 |
ë³´ë¤ìí¼ aë âê°ì 문ìë 2ë°ì´í¸ë¥¼ ì°¨ì§íê³ ð³, ð´, ðê°ì 문ìë ì½ëê°ì´ ë ê¸¸ê³ 4ë°ì´í¸ë¥¼ ì°¨ì§í©ëë¤.
ì¤ëì ì ìë°ì¤í¬ë¦½í¸ ì¸ì´ê° íìíì ëë ì ëì½ë ì¸ì½ë©ì ì§ê¸ë³´ë¤ ë¨ìíìµëë¤. 4ë°ì´í¸ 문ìê° ììì£ . ê·¸ëì ì¼ë¶ ì¸ì´ 기ë¥ì ìì§ë ì´ë° 문ìë¤ì ì ííê² ë¤ë£¨ì§ 못í©ëë¤.
ê·¸ì¤ íëë¡ lengthë ë¤ì ê²½ì°ìì 문ìê° ë ê° ìë¤ê³ ë´
ëë¤.
alert('ð'.length); // 2
alert('ð³'.length); // 2
íì§ë§ ë¶ëª
문ìë íëììì? ì¬ê¸°ì ì¤ìí ê²ì lengthë 4ë°ì´í¸ 문ì를 2ë°ì´í¸ 문ì 2ê°ë¡ ì·¨ê¸íë¤ë ê²ì
ëë¤. 4ë°ì´í¸ë¥¼ íëë¡ ë¬¶ì´ì ì·¨ê¸í´ì¼ íë¯ë¡ ì¬ë°ë¥´ì§ ìì ê²°ê³¼ì
ëë¤.(ì´ë° 문ì를 'ìë¡ê²ì´í¸ ìâì´ë¼ê³ í©ëë¤. 문ìì´ìì ìë¡ê²ì´í¸ ìì ëí´ ì½ì´ë³¼ ì ììµëë¤.)
기본ì ì¼ë¡ë ì ê· ííìë 4ë°ì´í¸ì '긴 문ìâ를 2ë°ì´í¸ 문ì 2ê°ë¡ ì·¨ê¸í©ëë¤. 문ìì´ì ê²½ì°ì²ë¼ ì´ë° ë°©ìì ì못ë ê²°ê³¼ë¡ ì´ì´ì§ ì ììµëë¤. ëì¤ì Sets and ranges [...]ìì ë¤ì ììë³¼ ê²ì ëë¤.
문ìì´ê³¼ ë¤ë¥´ê² ì ê· ííììë ì´ë° 문ì 를 í´ê²°í ì ìë u íëê·¸ê° ììµëë¤. u íë그를 ì¬ì©íë©´ ì ê·ìì 4ë°ì´í¸ 문ì를 ì¬ë°ë¥´ê² ì²ë¦¬í©ëë¤. ê·¸ë¦¬ê³ ì ëì½ë íë¡í¼í°(Unicode property)를 ì¬ì©í ê²ìì´ ê°ë¥í´ì§ëë¤. ë°ë¡ ììë³´ì£ .
ì ëì½ë íë¡í¼í° \p{â¦}
2018ë ë¶í° íì¤ì í¬í¨ëìì§ë§ Firefox(ë²ê·¸)ì Edge(ë²ê·¸)ë ì ëì½ë íë¡í¼í°ë¥¼ ìì§ ì§ìíì§ ììµëë¤.
ì ëì½ë íë¡í¼í°ì í¬ë¡ì¤ ë¸ë¼ì°ì ì§ìì í¬í¨í ì ê· ííìì âíì¥â 기ë¥ì ì ê³µíë XRegExp ë¼ì´ë¸ë¬ë¦¬ê° ììµëë¤.
ì ëì½ëì 모ë 문ìë ë¤ìí íë¡í¼í°ë¥¼ ê°ì§ëë¤. íë¡í¼í°ë 문ìê° ì´ë¤ 'ë²ì£¼âì ìíëì§ ì¤ëª í기ë íê³ ê·¸ ì¸ìë 문ìì ì¬ë¬ ê°ì§ ì 보를 ë´ê³ ììµëë¤.
ì를 ë¤ì´ 문ìì Letter íë¡í¼í°ê° ìë¤ë©´ ê·¸ 문ìë ì´ë í ì¸ì´ì ê¸ìë¼ë ë»ì
ëë¤. Number íë¡í¼í°ê° ìë¤ë©´ ìë¼ë¹ì ì«ìë íì ì«ìë ì«ìë¼ë ë»ì´ì£ .
\p{â¦}를 ì¬ì©íë©´ íë¡í¼í°ë¥¼ íµí´ 문ì를 ì°¾ì ì ììµëë¤. \p{â¦}를 ì¬ì©í기 ìí´ìë ì ê· ííìì u íëê·¸ê° ë°ëì ìì´ì¼ í©ëë¤.
ììë¡ p{Letter}ë ì¸ì´ì ê¸ì를 í기íë ë°©ë²ì
ëë¤. p{L}ì ëì ì¬ì©í ìë ììµëë¤. ì¬ê¸°ì Lì Letterì ì½ìì
ëë¤. ê±°ì 모ë íë¡í¼í°ì ì´ë ê² ì§§ê² ì¸ ì ìë ì½ìê° ììµëë¤.
ìë ììììë ì문ì, ì¡°ì§ì 문ì, íê¸ 3ì¢ ë¥ì ê¸ì를 ê²ìí©ëë¤.
let str = "A á ã±";
alert( str.match(/\p{L}/gu) ); // A,á,ã±
alert( str.match(/\p{L}/g) ); // null ('u' íëê·¸ê° ìì´ì ì¼ì¹ ê²°ê³¼ ìì)
ë¤ìì 주ì 문ì ë²ì£¼ì ê°ê°ì íì ë²ì£¼ 목ë¡ì ëë¤.
- 문ì(Letter)
L:- ì문ì(lowercase)
Ll - ì¡°ì (modifier)
Lm - ë¨ì´ì 첫 ê¸ì를 ë문ìë¡(titlecase)
Lt - ë문ì(uppercase)
Lu - 기í(other)
Lo
- ì문ì(lowercase)
- ì«ì(Number)
N:- 10ì§ì(decimal digit)
Nd - 문ì(letter number)
Nl - 기í(other)
No
- 10ì§ì(decimal digit)
- ë¬¸ì¥ ë¶í¸(Punctuation)
P:- ì°ê²°ì (connector)
Pc - ëì(dash)
Pd - ì²ì ë°ì´í(initial quote)
Pi - ë§ì§ë§ ë°ì´í(final quote)
Pf - ì´ê¸°(open)
Ps - ë«ê¸°(close)
Pe - 기í(other)
Po
- ì°ê²°ì (connector)
- íì(Mark)
M(ê°ì¸ ë±):- ê°ê²© ê²°í©(spacing combining)
Mc - 묶ì(enclosing)
Me - ë¹ê³µë°±(non-spacing)
Mn
- ê°ê²© ê²°í©(spacing combining)
- 기í¸(Symbol)
S:- íµí(currency)
Sc - ìì (modifier)
Sk - ìí(math)
Sm - 기í(other)
So
- íµí(currency)
- êµ¬ë¶ ê¸°í¸(Separator)
Z:- ì¤(line)
Zl - ë¨ë½(paragraph)
Zp - 공백(space)
Zs
- ì¤(line)
- 기í(Other)
C:- ì ì´(control)
Cc - íì(format)
Cf - í ë¹ëì§ ìì(not assigned)
Cn - ì¬ì©ì ì§ì (private use)
Co - ìë¡ê²ì´í¸(surrogate)
Cs
- ì ì´(control)
ì를 ë¤ì´ ì문ì를 ì°¾ìì¼ íë¤ë©´ \p{Ll}ì, ë¬¸ì¥ ë¶í¸ë¥¼ ì°¾ìì¼ íë¤ë©´ \p{P}를 ì¬ì©íë ìì¼ë¡ ê²ìí ì ììµëë¤.
ëí ë¤ìê³¼ ê°ì´ íìë ë²ì£¼ë ììµëë¤.
Alphabetic(Alpha)ë LettersLì ë¡ë§ ì«ì â «ê°ì´ 문ìë¡ ë ì«ìNlì ëí´ìOther_Alphabetic(OAlpha)ì ìí 문ìë¤ì 모ë í¬í¨í©ëë¤.Hex_digitì 16ì§ì ì«ìì¸0-9,a-f를 í¬í¨í©ëë¤.- ì´ê² ë§ê³ ë ë ìì£ .
ì ëì½ëë ì ë§ ë¤ìí íë¡í¼í°ë¥¼ ì§ìí©ëë¤. 모ë 걸 ëì´íë ¤ë©´ ê³µê°ì´ ë무 ë§ì´ íìíë ì°¸ê³ í ì ìë 문ì를 ìë ¤ë립ëë¤.
- 문ìë³ íë¡í¼í° 목ë¡: https://unicode.org/cldr/utility/character.jsp
- íë¡í¼í°ë³ 문ì 목ë¡: https://unicode.org/cldr/utility/list-unicodeset.jsp
- íë¡í¼í°ë³ ì¤ìë§: https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt
- í ì¤í¸ íìì¼ë¡ ì 리ë ì ëì½ë 문ìì ê° ë¬¸ìì 모ë íë¡í¼í°: https://www.unicode.org/Public/UCD/latest/ucd/
ìì: 16ì§ì
ì¤ì ì¬ë¡ë¡ 16ì§ì를 ì°¾ìë´
ìë¤. xFF íìì¼ë¡ ì°ê³ F ì리ìë 16ì§ìì ì«ì(0â¦1ì´ë Aâ¦F)ê° ë¤ì´ê°ëë¤.
16ì§ì ì«ìë \p{Hex_Digit}ë¡ í기í©ëë¤.
let regexp = /x\p{Hex_Digit}\p{Hex_Digit}/u;
alert("number: xAF".match(regexp)); // xAF
ìì: íì
íì를 ê²ìí´ë´ ìë¤.
Script(í기 ì²´ê³)ë¼ë ì ëì½ë íë¡í¼í°ê° ììµëë¤. Scriptë Cyrillic(í¤ë¦´ 문ì), Greek(ê·¸ë¦¬ì¤ ë¬¸ì), Arabic(ìë¼ë¹ì 문ì), Han(íì) ë±ì ê°ì ê°ì§ ì ììµëë¤. Script ê°ì ì ì²´ 목ë¡ì ì¬ê¸°ì ë³¼ ì ììµëë¤.
í¹ì í기 ì²´ê³ì 문ì를 ì°¾ì¼ë ¤ë©´ Script=<value>를 ì¬ì©í´ì¼ í©ëë¤. í¤ë¦´ 문ìë \p{sc=Cyrillic}, íìë \p{sc=Han}ë¡ ê²ìíë ìì¼ë¡ ì¸ ì ììµëë¤.
let regexp = /\p{sc=Han}/gu; // íì를 ë°í
let str = `Hello ÐÑÐ¸Ð²ÐµÑ ä½ å¥½ 123_456`;
alert( str.match(regexp) ); // ä½ ,好
ìì: íµí
$, â¬, Â¥ ë± íµí ë¨ì를 ëíë´ë 문ìë ì ëì½ë íë¡í¼í° \p{Currency_Symbol}를 ê°ì§ê³ ììµëë¤. ì§§ê²ë \p{Sc}ë¡ ì¬ì©í©ëë¤.
\p{Sc}를 ì¬ì©í´ì âíµí ë¨ì ë°ë¡ ë¤ ì«ìâ ííì ê°ê²© íì를 ì°¾ìë´
ìë¤.
let regexp = /\p{Sc}\d/gu;
let str = `Prices: $2, â¬1, Â¥9`;
alert( str.match(regexp) ); // $2,â¬1,Â¥9
ëì¤ì Quantifiers +, *, ? and {n}ìì ì릿ìê° ì¬ë¬ ê°ì¸ ì를 ì°¾ë ë°©ë²ì ììë³¼ ê²ì ëë¤.
ìì½
u íëê·¸ë¡ ì ê· ííììì ì ëì½ë ê´ë ¨ 기ë¥ì íì±íí ì ììµëë¤.
ì¦, ë¤ì ë 기ë¥ì´ ì¬ì© ê°ë¥í´ì§ëë¤.
- 4ë°ì´í¸ 문ì를 2ë°ì´í¸ 문ì ë ê°ë¡ ì²ë¦¬íì§ ìê³ ë¬¸ì í ê°ë¡ ì¬ë°ë¥´ê² ì²ë¦¬í©ëë¤.
\p{â¦}를 ì´ì©í´ ì ëì½ë íë¡í¼í°ë¥¼ ê²ìì ì¬ì©í ì ììµëë¤.
ì ëì½ë íë¡í¼í°ë¥¼ ì¬ì©íë©´ í¹ì ì¸ì´ì ë¨ì´, ë°ì´íë íµí ë¨ìê°ì í¹ì 문ì ë±ì 모ë ê²ìí ì ììµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.