JavaScript ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° SpiderMonkey Π½Π° Firefox
ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ RegExp Π΅Π½Π΄ΠΆΠΈΠ½ΡΡ Π² SpiderMonkey Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π·Π° Π·Π°ΠΌΡΠ½Π°, Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π°. ΠΠΎΠ΄ΡΠ»Π½ΠΎΡΡΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΡΠ΅Π· 2014 Π³. Π΄Π° ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ YARR RegExp, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π²ΡΠ² Firefox, Ρ ΡΠ°Π·ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Irregexp ΠΎΡ V8. Irregexp Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ V8 API, ΡΠ²ΡΡΠ·Π°Π½ ΡΡΡ ΡΡΠ±ΠΈΡΠ°ΡΠ° Π½Π° ΠΎΡΠΏΠ°Π΄ΡΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° V8 Π½ΠΈΠ·ΠΎΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ ΠΈ ΠΎΠ±Π΅ΠΊΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π». Π ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½Π΅ ΠΊΡΠΌ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ API Π½Π° SpiderMonkey ΠΏΡΠ΅Π· 2014 Π³., ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Irregexp Π±Π΅ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ, ΠΊΠ°ΡΠΎ ΡΠ»Π°Π³Π° β\uβ, ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ
ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π° Π²ΠΈΠ»ΠΈΡΠ° Π΅ ΡΡΡΠ΄Π½ΠΎ ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°. Π‘ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠ°Π·ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ° ECMAScript 2018, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Mozilla Π·Π°ΠΏΠΎΡΠ½Π°Ρ
Π° Π΄Π° ΠΌΠΈΡΠ»ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π°Ρ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠ΅Π½Π°ΡΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ Irregexp. ΠΠ°ΡΠΎ ΠΈΠ·Ρ
ΠΎΠ΄ Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠΈ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» Irregexp Π² SpiderMonkey (ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π°Ρ ΡΠ°ΠΌΠΎ Π΄ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π°ΡΠ° Π·Π°ΠΌΡΠ½Π° Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ β#includeβ).
Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π° Irregexp Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° V8 Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ Π½Π° SpiderMonkey.
ΠΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° RegExp ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Firefox Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΡΠ»Π°Π²ΡΠ½Ρ, Π΅ΠΊΡΠ°Π½ΠΈΡΠ°ΡΠΈ Unicode ΡΠΈΠΌΠ²ΠΎΠ»Π½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΡΠ»Π°Π³Π° dotAll ΠΈ ΡΠ΅ΠΆΠΈΠΌ Lookbehind:
-
ΠΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ Π³ΡΡΠΏΠΈ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π°ΡΠΎΡΠΈΠΈΡΠ°ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΎΡ Π½ΠΈΠ·, ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ΅Π½ ΠΈΠ·ΡΠ°Π·, Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠΌΠ΅Π½Π° Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΡΠ΅Π΄Π½ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΌΠ΅ΡΡΠΎ "/(\d{4})-(\d{2})-(\d{ 2})/" ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ "/( ? \d{4})-(? \d{2})-(? \d{2})/" ΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π³ΠΎΠ΄ΠΈΠ½Π°ΡΠ° Π½Π΅ ΡΡΠ΅Π· ΡΠ΅Π·ΡΠ»ΡΠ°Ρ[1], Π° ΡΡΠ΅Π· ΡΠ΅Π·ΡΠ»ΡΠ°Ρ.Π³ΡΡΠΏΠΈ.Π³ΠΎΠ΄ΠΈΠ½Π°). -
ΠΡΠ³ΡΡΠ²ΠΎ ΠΎΡ ΡΠ°ΡΠΎΠ²Π΅ΡΠ΅ Unicode ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ \p{β¦} ΠΈ \P{β¦}, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ \p{Number} Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π·Π½Π°ΡΠΈ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΠ»Π° (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π½Π°ΡΠΈ ΠΊΠ°ΡΠΎ β ), \p{Alphabetic} - Π±ΡΠΊΠ²ΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΉΠ΅ΡΠΎΠ³Π»ΠΈΡΠΈ ), \p{Math} β ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈ Π΄Ρ. - ΡΠ»Π°Π³
dotAll ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° ΠΌΠ°ΡΠΊΠ°ΡΠ° "." Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π½Π°ΡΠΈ Π·Π° Π½ΠΎΠ² ΡΠ΅Π΄. - ΡΠ΅ΠΆΠΈΠΌ
ΠΠΎΠ³Π»Π΅Π΄Π½ΠΈ Π½Π°Π·Π°Π΄ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π² ΡΠ΅Π³ΡΠ»ΡΡΠ΅Π½ ΠΈΠ·ΡΠ°Π·, ΡΠ΅ Π΅Π΄ΠΈΠ½ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π° Π΄ΡΡΠ³ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΌΠ° Π² Π΄ΠΎΠ»Π°ΡΠΈ, Π±Π΅Π· Π΄Π° ΡΠ»Π°Π²ΡΡΠ΅ Π·Π½Π°ΠΊΠ° Π·Π° Π΄ΠΎΠ»Π°Ρ).
ΠΡΠΎΠ΅ΠΊΡΡΡ Π±Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Ρ ΡΡΠ°ΡΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° V8, ΠΊΠΎΠΈΡΠΎ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ°Π±ΠΎΡΠΈΡ
Π° Π·Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠ° Π½Π° Irregexp ΠΎΡ V8 ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡ
Π° Π½ΡΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° SpiderMonkey, Π² Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ "#ifdef". Π‘ΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΈΠ·Π³ΠΎΠ΄Π½ΠΎ. ΠΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Mozilla Π²Π½Π΅ΡΠΎΡ
Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Irregexp, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Ρ Π½ΡΠΊΠΎΠΈ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru