рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдХреБрдЫ рдХрд╕реНрдЯрдо рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдмрд┐рдирд╛, рдмреАрдПрдордкреА рдХреЗ рдмрд╛рд╣рд░ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ/рдХреЛрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╕реЗ рдареАрдХ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ, рдпрд╛рдиреА, рдЬрд┐рдирдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 16 рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реАрдорд╛ PEG.js рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ [\u1D400-\u1D419]
(рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ [с╡А0-с╡Б9]
рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рд╕рдордХрдХреНрд╖ [ЁЭРА-ЁЭРЩ]
(рдЬреЛ "рдЕрдорд╛рдиреНрдп рд╡рд░реНрдг рд╢реНрд░реЗрдгреА" рдлреЗрдВрдХрддрд╛ рд╣реИ) рдЬреИрд╕реА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреНрд░реБрдЯрд┐)ред (рдФрд░ рдирдП ES6 рдиреЛрдЯреЗрд╢рди [\u{1D400}-\u{1D419}]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ: SyntaxError: Expected "!", "$", "&", "(", ".", character class, comment, end of line, identifier, literal, or whitespace but "[" found.
ред)
рдХреНрдпрд╛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП PEG.js рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЛрдб:
рдпрд╣ рд╡реНрдпрд╛рдХрд░рдг:
//MathUpper = [ЁЭРА-ЁЭРЩ]+
MathUpperEscaped = [\u1D400-\u1D419]+
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:
рджрд┐рдП рдЧрдП рд╡реНрдпрд╛рдХрд░рдг рд╕реЗ рдЙрддреНрдкрдиреНрди рдкрд╛рд░реНрд╕рд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "ЁЭРАЁЭРБЁЭРВ"ред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:
рдПрдХ рдкрд╛рд░реНрд╕ рддреНрд░реБрдЯрд┐: Line 1, column 1: Expected [с╡А0-с╡Б9] but "
(рдпрд╛, рдЬрдм рдЕрдиреНрдп рдирд┐рдпрдо, рдПрдХ "рдЕрдорд╛рдиреНрдп рд╡рд░реНрдг рд╢реНрд░реЗрдгреА" рддреНрд░реБрдЯрд┐ рдЕрд╕рдореНрдмрджреНрдз рд╣реИред)
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреАрдИрдЬреА.рдЬреЗрдПрд╕ рд╡реНрдпрд╛рдХрд░рдг рдкрд╛рд░реНрд╕рд░ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рд╕рдорд░реНрдерди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдпреВрдирд┐рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдпрд╛ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ (рдпрд╣ рджреЛрдиреЛрдВ рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: _Non -рдмреАрдПрдордкреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ_)ред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХ рдЬрд░реВрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдФрд░ рдХрд╛рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (_PEG.js 0.x_ рд╕рд╣рд┐рдд) рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдХреЛ рдХреБрдЫ рдкреАрдЖрд░ рдХреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдордЭрддрд╛ рд╣реИ, рдпрд╛ рдЕрдВрддрддрдГ _PEG рдХреЗ рдмрд╛рдж рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред рдЬреЗрдПрд╕ v1_, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рджреЛрд╕реНрддред
FYI рдХрд░реЗрдВ, рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред рд╡реНрдпрд╛рдХрд░рдг
start = result:[\uD83D\uDCA9]+ {return result.join('')}
рдкрд╛рд░реНрд╕ рдЬреЛ u+1F4A9 рд╣реИред рдкрд░рд┐рдгрд╛рдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ ('') рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реА рдХреЛ рд╡рд╛рдкрд╕ рдПрдХ рд╕рд╛рде рд░рдЦрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рд╣реИрдВрдХреА рдХреЗ рдмрдЬрд╛рдп ['\uD83D','\uDCA9']
рдорд┐рд▓рддрд╛ рд╣реИред рд░реЗрдВрдЬ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧреАред
рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рдкрд░ рдЕрдзрд┐рдХ: https://en.wikipedia.org/wiki/UTF-16#U +010000_to_U+10FFFF
рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдУрдкреА рдиреЗ рдЬреЛ рдорд╛рдВрдЧрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
@drewnolan рд╕рд┐рд░ рдКрдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡рд╣ рд╡реНрдпрд╛рдХрд░рдг \uD83D\uD83D
рднреА рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП: рдореИрдВ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдмреАрдПрдордкреА рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдмрд╕реЗрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдмреАрдПрдордкреА рдХреЗ рдирд┐рдЬреА рдЙрдкрдпреЛрдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдореИрдкрд┐рдВрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред .
рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@futagoza - рдореИрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред
utf-16
, ucs4
, рд╡рдЧреИрд░рд╣ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ codepoints
, рдЬреЛ рдХрд┐ рдЗрдЪреНрдЫрд┐рдд рдбреЗрдЯрд╛ рд╣реИрдВ, рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП utf-16-le
рд╕реЗ рдЖрдк рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рджреЛ-рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ code units
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 0x10ffff
рддрдХ рдХреЗ рдЙрдЪреНрдЪ рдореВрд▓реНрдп рд╡рд░реНрдгреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредрдореБрдЭреЗ рднреА рдпрд╣реА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдХреАрдХрдд рдореЗрдВ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ
рдкрд╡рд┐рддреНрд░ рдмрдХрд╡рд╛рд╕, рдХрд┐рд╕реА рдиреЗ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд░реНрд╕рд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд┐рдпрд╛ рдерд╛ , рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдкрд╣рдЪрд╛рди рд▓рд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдорд╛рдирдХ рдЬреЗрдПрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджрд┐рдпрд╛
рдпрд╣ рд╡рд┐рд▓рдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ
@StoneCypher рдореБрдЭреЗ рддреБрдореНрд╣рд╛рд░реЗ рджрд┐рд▓ рдХреА рдЖрдЧ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ! рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЛ рдХрдард┐рди рд╕рдордп рдХреНрдпреЛрдВ рджреЗрдВ? рдХрд┐рд╕реА рдХрд╛ рдХреБрдЫ рдмрдХрд╛рдпрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдкрдирд╛ рдХрд╛рдВрдЯрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдП рд░рдЦрддреЗ?
рдХреЛрдИ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░рдХреНрд╖рдХ рдирд╣реАрдВ рд╣реИред рдЬрд┐рд╕ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдкреАрдИрдЬреА рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдиреЗ рдХрднреА рдХреБрдЫ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдЧрд▓реЗ рдирд╛рдмрд╛рд▓рд┐рдЧ рдкрд░ рддреАрди рд╕рд╛рд▓ рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рдлрд┐рд░ рдХрд╣рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд╕рднреА peg.js
рджреВрд░ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрд╕рдВрдЧрдд рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдПрдПрд╕рдЯреАред
рдЯреВрд▓ рдиреЗ рдЕрдкрдирд╛ рдЖрдзрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рдЦреЛ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдЖрджрдореА рдкрд░ рдПрдХ-рдкрдВрдХреНрддрд┐ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╕рд╛рд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреИрд╕реЗ es6 рдореЙрдбреНрдпреВрд▓ рд╕рдорд░реНрдерди, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди, рддреАрд░ рд╕рдорд░реНрдерди, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдпреВрдирд┐рдХреЛрдб, рд╡рдЧреИрд░рд╣ред
рдПрдХ рджрд░реНрдЬрди рд▓реЛрдЧ рдЙрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдХрд╣рддрд╛ рд░рд╣рддрд╛ рд╣реИ "рдирд╣реАрдВ, рдпрд╣ рдЕрдм рдореЗрд░рд╛ рд╢реМрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ"
рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд╛рд░реНрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрдВрдкрдирд┐рдпрд╛рдВ рд╣реИрдВред рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░рд╛рдм рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред
рдЗрд╕ рдЖрджрдореА рдиреЗ рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░рдХреНрд╖рдХ рдмрдирдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛, рдФрд░ рдХреЛрдИ рд░рдЦрд░рдЦрд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрдиреЗ рджрд┐рдпрд╛ рдЬрд╛рдПред
рдЕрдкрдирд╛ рдХрд╛рдВрдЯрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдП рд░рдЦрддреЗ?
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рддреАрди рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╣реИред рдореЗрд░реЗ peg
рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХрд╛ рд▓рдЧрднрдЧ рдПрдХ рддрд┐рд╣рд╛рдИ рд╣рд┐рд╕реНрд╕рд╛ рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдореБрдЭреЗ рдЗрд╕реЗ рдХреНрд▓реЛрди рдХрд░рдирд╛ рдерд╛, рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдерд╛, рдФрд░ рдЖрдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдирд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдмрд╣ рдЧрдпрд╛ рд╣реИ
рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП рдЗрди рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреЛ 2017 рд╕реЗ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдмреИрдареЗ рд╣реИрдВред
рдпрд╣ рдЖрджрдореА рдЦреВрдВрдЯреА рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ; рд╡рд╣ рдЗрд╕реЗ рдорд░рдиреЗ рджреЗ рд░рд╣рд╛ рд╣реИред
рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕рдордп рд╣реИред
@drewnolan - рддреЛ, тАЛтАЛрдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди, рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдмрд╕, рд╕рдВрдпреЛрдЧ рд╕реЗ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реНрддрд░ рдмрд┐рдЯ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛, рди рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реНрддрд░ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдпрд╛рдиреА, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 240 рдХрд╛ рдпреВрдирд┐рдХреЛрдб рдорд╛рди рд╣реИ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рд╕реЛрдЪреЗрдВрдЧреЗ "рдУрд╣, рдЙрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ 0b1111 0000
ред" рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреВрдирд┐рдХреЛрдб 240 рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; 127 рд╕реЗ рдЕрдзрд┐рдХ рдХреЛ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢реАрд░реНрд╖ рдмрд┐рдЯ рдПрдХ рдзреНрд╡рдЬ рд╣реИ, рди рдХрд┐ рдорд╛рди рдмрд┐рдЯред рддреЛ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ 240 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрдВрдбрд╛рд░рдг рдореЗрдВ 0b0000 0001 0111 0000
рд╣реИ (рдпреВрдЯреАрдПрдл -7 рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдФрд░ рдЯрд╛рдЗрдкреЛ рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдВ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реЛрддреА рд╣реИрдВред рдФрд░ рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдЧрд▓рдд рд╣реИ . рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдПрд╕рдПрдордПрд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ рдХреБрд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдг рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред)
рддреЛ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╛рдЗрдЯ STUV WXYZ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ utf16 рдореЗрдВ, ucs4 рдбреЗрдЯрд╛ рд╕реЗ, рдпрджрд┐ рдЖрдкрдХреА рдЪреАрдЬрд╝ рдЖрдзреА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЕрдХреНрд╕рд░ рдЖрдк рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдПрдХ рд╕рд╛рде рд╕реНрдЯреЗрдкрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
128 рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред (рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛?)
рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рджреВрд╕рд░реА рдмрд╛рдЗрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╣ рд╢реАрд░реНрд╖ рдмрд┐рдЯ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЖрдзреЗ рдореЗрдВ рдХрд╛рдЯрдиреЗ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рдЬреБрдбрд╝ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд╡рд╛рдкрд╕ рдПрдХ рд╕рд╛рде рд╕реНрдЯреЗрдкрд▓ рдХрд░рдирд╛ рдореВрд▓реНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рддрд╛ рд╣реИред рдбреАрдХреЛрдбреЗрдб рдорд╛рди рдПрдиреНрдХреЛрдбреЗрдб рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд╣реАрдВред
рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрдореЛрдЬреА рдЗрд╕ рд░реЗрдВрдЬ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рджреБрд░реНрд▓рдн рдЪреАрдиреА, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрдгрд┐рдд рдФрд░ рд╕рдВрдЧреАрдд рдкреНрд░рддреАрдХреЛрдВ рд╕рд╣рд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рджреА, рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рдЧрднрдЧ рд╕рднреА рдЗрдореЛрдЬреА рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рд╣рд░ рдорд╛рдирд╡ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпреВрдирд┐рдХреЛрдб 6 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬреЛ рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ
рд▓реЗрдХрд┐рди рдЗрд╕ рдкреАрдЖрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдмрд╛рд░ рдЗрд╕рдХреА рд╢реБрджреНрдзрддрд╛ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ, рдпреВрдирд┐рдХреЛрдб рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдХреНрдпреЛрдВ PHP рдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИ)
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ . (dot character)
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рднреА рдпреВрдирд┐рдХреЛрдб рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХрд░рдирд╛:
const string = '-ЁЯРО-ЁЯС▒-';
const symbols = (string.match(/./gu));
console.log(JSON.stringify(symbols, null, ' '));
const pegResult = require('pegjs/')
.generate('root = .+')
.parse(string);
console.log(JSON.stringify(pegResult, null, ' '));
рдЖрдЙрдЯрдкреБрдЯ:
[
"-",
"ЁЯРО",
"-",
"ЁЯС▒",
"-"
]
[
"-",
"\ud83d",
"\udc0e",
"-",
"\ud83d",
"\udc71",
"-"
]
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ #616 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ \u{hhhhhhh}
, рдореИрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдКрдВрдЧрд╛ред
рд╕рд░реЛрдЧреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдпреВрдЯреАрдПрдл -16 рд░реЗрдЧреЗрдХреНрд╕ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП https://github.com/mathiasbynens/regenerate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛; рдпрд╣ рдкреИрдХреЗрдЬ pegjs рдХреА рдкрд╣рд▓реА рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛрдЧреА, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ (рдпреВрдирд┐рдХреЛрдб рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдлрд┐рд▓ рднреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, # 648 рджреЗрдЦреЗрдВ)ред рдпрджрд┐ рдЖрдк UTF-16 рд╕рд░реЛрдЧреЗрдЯ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рджреЗрдЦреЗрдВ ред
PEG.js рдХреЛ рд╕рдВрдкреВрд░реНрдг рдпреВрдирд┐рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░ рд╣реИрдВ:
.
рд▓рд╛рдЧреВ рдХрд░реЗрдВредрдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реА рдкрд╛рд░реНрд╕рд░ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдВрджреБ 5 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбреЙрдЯ рдирд┐рдпрдо рдПрдХ рдпрд╛ рджреЛ рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЛ рдпрд╛ рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:
рд░реЗрдЧреЗрдХреНрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд╛рд░реНрд╕рд░ рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЙрдирдХреА рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ (рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ) рд╣реИ рдпрд╛ рдирд╣реАрдВред 3 рдорд╛рдорд▓реЗ рд╣реИрдВ: 1. рдХреЗрд╡рд▓ рдПрдХ рдмреАрдПрдордкреА рдпрд╛ рдПрдХ рдХреЛрдб рдЗрдХрд╛рдИ, рдпрд╛ 2. рдХреЗрд╡рд▓ рджреЛ рдХреЛрдб рдЗрдХрд╛рдЗрдпрд╛рдВ, рдпрд╛ 3. рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдпрд╛ рджреЛ рдХреЛрдб рдЗрдХрд╛рдЗрдпрд╛рдВред рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд░реЗрдЧреЗрдХреНрд╕ рдХреНрд▓рд╛рд╕ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЛрдб рдЗрдХрд╛рдИ рд╣реЛрддреА рд╣реИ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ )ред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕ рдмрд╛рдЗрдЯрдХреЛрдб рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП 1 рдпрд╛ 2 рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдХ рдирдпрд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдорд┐рд▓рд╛рди рдХреА рдЧрдИ рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдХрд░реНрд╕рд░ рдмрдврд╝рд╛рдПрдВред рдПрдХ рдирдП рдмрд╛рдЗрдЯрдХреЛрдб рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВрдЧреЗ: 1. рд╣рдореЗрд╢рд╛ рдорд┐рд▓рд╛рди рдХреА рдЧрдИ рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд┐рди рдмреАрдПрдордкреА-рдХреЗрд╡рд▓ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдЬреБрд░реНрдорд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ; 2. рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдЗрдХрд╛рдИ рдПрдХ рдЙрдЪреНрдЪ рд╕рд░реЛрдЧреЗрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рдж 1 рдпрд╛ 2 рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рд░реЛрдЧреЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рдиреЗ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд рдпреВрдЯреАрдПрдл -16 рд╕рд░реЛрдЧреЗрдЯ рдХреЛ рдЕрдХреЗрд▓рд╛ рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд┐рдирд╛ рдмрдирд╛рдпрд╛ рд╣реИ ( рдЕрдЧрд▓рд╛ рдмрд┐рдВрджреБ рджреЗрдЦреЗрдВ) рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдмреАрдПрдордкреА рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рджрд░реНрд╢рди рджрдВрдб рднреА рд╣реИред
рдПрдХрд╛рдХреА рд╕рд░реЛрдЧреЗрдЯ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж рдХрдо рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рдмрд┐рдирд╛ рдЙрдЪреНрдЪ рд╕рд░реЛрдЧреЗрдЯ, рдпрд╛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЙрдЪреНрдЪ рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рдмрд┐рдирд╛ рдХрдо рд╕рд░реЛрдЧреЗрдЯ)ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рд░рд╛рдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд░реЗрдЧреЗрдХреНрд╕ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрд╛ рддреЛ рдЕрдХреЗрд▓реЗ рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рд╕рд╛рде рдпрд╛ рддреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд рдпреВрдЯреАрдПрдл -16 рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг (рдмреАрдПрдордкреА рдпрд╛ рдПрдХ рдЙрдЪреНрдЪ рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рдмрд╛рдж рдХрдо рд╕рд░реЛрдЧреЗрдЯ) рдХреЗ рд╕рд╛рде, рдЕрдиреНрдпрдерд╛ рдЦрддрд░рд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рд▓реЗрдЦрдХ рдЕрдирдЬрд╛рди рд╣реИрдВ UTF-16 рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рддреА рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреА рд╣реИрдВ, рдФрд░ рд╡реНрдпрд╛рдХрд░рдг рд▓реЗрдЦрдХ рдЬреЛ рдЦреБрдж рдХреЛ UTF-16 рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдЪреНрдЪ рдФрд░ рдирд┐рдореНрди рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PEG рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдкрд╛рд░реНрд╕рд░ рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЖрдЧрдВрддреБрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЗрдЧреЗрдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреАрдИрдЬреА рдореЗрдВ рдЕрдХреЗрд▓реЗ рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рдкреНрд░рд╢реНрди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреАрдИрдЬреА рдкрд╛рд░реНрд╕рд░ рд╣рдореЗрд╢рд╛ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рдХреЛрдб рдЗрдХрд╛рдИ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рддреЛ рдпрд╣ рд░реЗрдЧреЗрдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд╣рдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдПрдХ рдЙрдЪреНрдЪ рд╕рд░реЛрдЧреЗрдЯ рдХреЛ рдХрдо рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░реЗрдВ, рдЖрджрд┐ред
рд╕реВрдХреНрд╖реНрдо рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП PR #616 рдкрд░ рдЖрдзрд╛рд░рд┐рдд #651 рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ https://github.com/Seb35/pegjs/commit/0d33a7a4e13b0ac7c55a9cfaadc16fc0a5dd5f0c рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЕрдВрдХ 2 рдФрд░ 3 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдХрд░реНрд╕рд░ рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рд╣реИрдХ (рдмрд┐рдВрджреБ 4) рдФрд░ рдирд┐рдпрдо рдбреЙрдЯ .
(рдмрд┐рдВрджреБ 5) рдХреЗ рд▓рд┐рдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдХрд╛рд░реНрдп https://github.com/Seb35/pegjs/tree/dev-astral-classes-final рдореЗрдВ рд╣реИред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдкрд╛рдВрдЪ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЗрдПрд╕ рд░реЗрдЧреЗрдХреНрд╕ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ)ред
рд╡реИрд╢реНрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЗрдПрд╕ рд░реЗрдЧреЗрдХреНрд╕ рдореЗрдВ рдзреНрд╡рдЬ unicode
unicode
рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк [^a]
рдкрд╛рда "ЁЯТп" рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд░реНрд╕рд░ 2 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рдмрдврд╝рд╛ рд╣реБрдЖ рд╣реИ)ред рдЬрдм рд╡рд┐рдХрд▓реНрдк unicode
рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХрд░реНрд╕рд░ рдХреЛ рд╣рдореЗрд╢рд╛ 1 рдХреЛрдб рдЗрдХрд╛рдИ рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдкреАрдИрдЬреА.рдЬреЗрдПрд╕ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЬреЗрдПрд╕ рд░реЗрдЧреЗрдХреНрд╕: рдХреНрдпрд╛ рд╣рдореЗрдВ рдЧреИрд░-рдпреВрдирд┐рдХреЛрдб рдореЛрдб рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ [\u{1F4AD}-\u{1F4AF}]
( [\uD83D\uDCAD-\uD83D\uDCAF]
рдмрд░рд╛рдмрд░) рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ? рд╣рдо "рдЗрдирдкреБрдЯ рдпреВрдирд┐рдХреЛрдб" рдФрд░ "рдЖрдЙрдЯрдкреБрдЯ рдпреВрдирд┐рдХреЛрдб" рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЗрдирдкреБрдЯ рдпреВрдирд┐рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ true
рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдпреВрдирд┐рдХреЛрдб false
рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ (рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдпреВрдирд┐рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ false
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ), рд╣рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпреВрдЯреАрдПрдл -16 рдХреЗ рдХрд╛рдордХрд╛рдЬ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреАрдордд рдкрд░ рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдХрд░рдг рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред :
// rule matching [\u{1F4AD}-\u{1F4AF}]
my_class = "\uD83D" [\uDCAD-\uDCAF]
// rule matching any Unicode character
my_strict_unicode_dot_rule = $( [\u0000-\uD7FF\uE000-\uFFFF] / [\uD800-\uDBFF] [\uDC00-\uDFFF] )
// rule matching any Unicode character or a lone surrogate
my_loose_unicode_dot_rule = $( [\uD800-\uDBFF] [\uDC00-\uDFFF]? / [\u0000-\uFFFF] )
рддреЛ рдПрдХ рд╡реНрдпрд╛рдХрд░рдг рд▓реЗрдЦрдХ рдЬреЛ рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд╛рд░реНрд╕рд░ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧреЛрдВ рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдРрд╕реЗ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди рдпрд╣ рдореБрджреНрджрд╛ рдпреВрдЯреАрдПрдл -16 рдЗрдВрдЯрд░реНрдирд▓ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдП рдмрд┐рдирд╛ рдпреВрдирд┐рдХреЛрдб рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдорд╛рдирд╛ рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рдкрд╛рда рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкреАрдИрдЬреА.рдЬреЗрдПрд╕ рдкрд╛рд░реНрд╕рд░ рдХреЗ 'рдбреЙрдЯ' рдирд┐рдпрдо рдиреЗ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рдереАред рджреВрд╕рд░реЗ рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рдпрд╛рд╕ рдиреЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ (рддреНрд╡рд░рд┐рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рдирд┐рдпрдо рд╣рдореЗрд╢рд╛ 1 рдХреЛрдб рдЗрдХрд╛рдИ рд╣реИ) рдФрд░ рд╡рд░реНрдг рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬрд╝рд┐рдЯрд░ рддреИрдпрд╛рд░-рдпреВрдирд┐рдХреЛрдб-рдХреНрд▓рд╛рд╕реЗрдЬ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ (рдЙрджрд╛рд╣рд░рдг [\uD83D\uDCAD-\uD83D\uDCAF]
рдХреЛ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ [ "\uD83D", [ "\uDCAD", "\uD83D" ], "\uDCAF" ]
рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрд╕реЗ [ [ "\uD83D\uDCAD", "\uD83D\uDCAF" ] ]
)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рд╣реА рд▓рд┐рдЦрдиреЗ рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреА рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рдФрд░ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡рд░реНрдгреЛрдВ ("ЁЯТп", "uD83DuDCAF", "u{1F4AF}") рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рдЖрдЧрдВрддреБрдХ рдореЗрдВред
рдореИрдВрдиреЗ рджреВрд╕рд░реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рджреЛ рдСрдкрдХреЛрдб рдЬреЛрдбрд╝реЗ:
(input.charCodeAt(currPos) & 0xFC00) === 0xD800 && input.length > currPos + 1 && (input.charCodeAt(currPos+1) & 0xFC00) === 0xDC00
classes[c].test(input.substring(currPos, currPos+2)
рдмрдЬрд╛рдп рдЕрдЧрд▓реА рджреЛ рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИACCEPT_N
рд╕рд╛рде 1 рдпрд╛ 2 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрдг рд╡рд░реНрдЧ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ (1 рдпрд╛ 2 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ) рдХреЗ рд░реЗрдЧреЗрдХреНрд╕редрдореИрдВрдиреЗ "рдореИрдЪ" рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХрд┐рдП, рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди рдореЛрдб (рдпреВрдирд┐рдХреЛрдб рдпрд╛ рдирд╣реАрдВ) рдФрд░ рд╡рд░реНрдг рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ "рдореГрдд рдХреЛрдб" рдкрде рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд░реЗрдЧреЗрдХреНрд╕ рд╣рдореЗрд╢рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрддреЗ рд╣реИрдВ: рдЙрд▓рдЯрд╛ рд░реЗрдЧреЗрдХреНрд╕ рд╡рд┐рдкрд░реАрдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд╛рдЗрдЯрдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЖрд╕рд╛рди рдерд╛ред
рдореИрдВрдиреЗ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ рдЬреЛрдбрд╝реВрдВрдЧрд╛ (рд╢рд╛рдпрдж рд╡рд┐рдХрд▓реНрдк (рд╡рд┐рдХрд▓реНрдкреЛрдВ) рдпреВрдирд┐рдХреЛрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рдШрд░-рдирд┐рд░реНрдорд┐рдд рдпреВрдирд┐рдХреЛрдб рдбреЙрдЯ рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб)ред рдореИрдВ рдЗрд╕реЗ рдкреАрдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдорд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реВрдВрдЧрд╛ред