if (/^\s*(;.*)?$/.test(line)) {
return;
} else if (match = line.match(/^\[(.*)\]$/)) {
currentSection = {name: match[1], fields: []};
categories.push(currentSection);
} else if (match = line.match(/^(\w+)=(.*)$/)) {
currentSection.fields.push({name: match[1],
value: match[2]});
} else {
throw new Error("Π‘ΡΡΠΎΡΠΊΠ° '" + line + "' ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.");
}
});
return categories;
}
ΠΠΎΠ΄ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΠΊΡΠΈΠΈ (current section). Π‘Π½Π°ΡΠ°Π»Π° ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΡΠΊΡ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΈ /^\s(;.)?$/. Π‘ΠΎΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ? Π§Π°ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠΎΠ±ΠΎΠΊ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ, Π° ? Π΄Π΅Π»Π°Π΅Ρ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠ° ΡΠΎΠ²ΠΏΠ°Π΄ΡΡ ΠΈ ΡΠΎ ΡΡΡΠΎΡΠΊΠ°ΠΌΠΈ, ΡΠΎΡΡΠΎΡΡΠΈΠΌΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².
ΠΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° β Π½Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π»ΠΈ ΠΎΠ½Π° Π½ΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΠΈΡ. ΠΡΠ»ΠΈ Π΄Π°, ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΠΊΡΠΈΠΈ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ β ΡΡΡΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
ΠΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π», ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ^ ΠΈ $ Π·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π° Π½Π΅ Ρ ΡΠ°ΡΡΡΡ. ΠΡΠ»ΠΈ ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΊΠΎΠ΄ Π² ΡΠ΅Π»ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π²Π°ΡΡ ΡΡΡΠ°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΈ ΡΠ°ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΄Π½ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ if (match = string.match(...)) ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΡΡΡΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π² ΡΠΈΠΊΠ»Π΅ while. Π§Π°ΡΡΠΎ Π²Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ² match Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° if, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ. Π§ΡΠΎΠ±Ρ Π½Π΅ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ if, ΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ ΡΡΠ°Π·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
ΠΠ·-Π·Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ°, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β«Π² Π³ΡΠ°Π½ΠΈΡΠ΅Β», ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΈ JavaScript ΡΡΠΏΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΠΌΠΈΡΡ Π² Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠΈΠΌΠ²ΠΎΠ» Β«Π±ΡΠΊΠ²ΡΒ» Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠΎΠΊ JavaScript, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· 26 Π±ΡΠΊΠ² Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ°, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ Π΅ΡΡ ΠΏΠΎΠ΄ΡΡΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠΊΠ²Ρ ΡΠΈΠΏΠ° Γ© ΠΈΠ»ΠΈ Ξ², ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π±ΡΠΊΠ²Π°ΠΌΠΈ, Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ \w (ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄ΡΡ Ρ \W, ΡΠΎ Π΅ΡΡΡ Ρ Π½Π΅-Π±ΡΠΊΠ²ΠΎΠΉ).
ΠΠΎ ΡΡΡΠ°Π½Π½ΠΎΠΌΡ ΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ², ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ \s (ΠΏΡΠΎΠ±Π΅Π») ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² Unicode ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠΌΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΡΠΊΠΈ, ΠΊΠ°ΠΊ Π½Π΅ΡΠ°Π·ΡΡΠ²Π½ΡΠΉ ΠΏΡΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ ΠΌΠΎΠ½Π³ΠΎΠ»ΡΡΠΊΠΈΠΉ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π³Π»Π°ΡΠ½ΡΡ .
Π£ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΡΠ΅Π³ΡΠ»ΡΡΠΎΠΊ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ Π΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Unicode, ΡΠΈΠΏΠ° Β«Π²ΡΠ΅ ΠΏΡΠΎΠΏΠΈΡΠ½ΡΠ΅ Π±ΡΠΊΠ²ΡΒ», Β«Π²ΡΠ΅ Π·Π½Π°ΠΊΠΈ ΠΏΡΠ΅ΠΏΠΈΠ½Π°Π½ΠΈΡΒ» ΠΈΠ»ΠΈ Β«ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΒ». ΠΡΡΡ ΠΏΠ»Π°Π½Ρ ΠΏΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ Π² JavaScript, Π½ΠΎ ΠΎΠ½ΠΈ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π±ΡΠ΄ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π½Π΅ΡΠΊΠΎΡΠΎ.
ΠΡΠΎΠ³
Π Π΅Π³ΡΠ»ΡΡΠΊΠΈ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΡΡΠΎΠΊΠ°Ρ . ΠΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
/abc/ ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
/[abc]/ ΠΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°
/[^abc]/ ΠΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°
/[0-9]/ ΠΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ°
/x+/ ΠΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½Π° x
/x+?/ ΠΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, Π½Π΅ΠΆΠ°Π΄Π½ΠΎΠ΅
/x*/ ΠΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ
/x?/ ΠΠΎΠ»Ρ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅
/x{2,4}/ ΠΡ Π΄Π²ΡΡ Π΄ΠΎ ΡΠ΅ΡΡΡΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ
/(abc)/ ΠΡΡΠΏΠΏΠ°
/a|b|c/ ΠΡΠ±ΠΎΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²
/\d/ ΠΡΠ±Π°Ρ ΡΠΈΡΡΠ°
/\w/ ΠΡΠ±ΠΎΠΉ Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎ-ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (Β«Π±ΡΠΊΠ²Π°Β»)
/\s/ ΠΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»
/./ ΠΡΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΠΊΡΠΎΠΌΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² ΡΡΡΠΎΠΊΠΈ
/\b/ ΠΡΠ°Π½ΠΈΡΠ° ΡΠ»ΠΎΠ²Π°
/^/ ΠΠ°ΡΠ°Π»ΠΎ ΡΡΡΠΎΠΊΠΈ
/$/ ΠΠΎΠ½Π΅Ρ ΡΡΡΠΎΠΊΠΈ
Π£ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΈ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ test, Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ Π² ΡΡΡΠΎΠΊΠ΅. ΠΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ exec, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π³ΡΡΠΏΠΏΡ. Π£ ΠΌΠ°ΡΡΠΈΠ²Π° Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ index, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅, Π³Π΄Π΅ Π½Π°ΡΠ°Π»ΡΡ ΠΏΠΎΠΈΡΠΊ.
Π£ ΡΡΡΠΎΠΊ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ match Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΈ ΠΌΠ΅ΡΠΎΠ΄ search, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠ΅ΡΠΎΠ΄ replace ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΡΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΡΠΎΠΊΡ. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² replace ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΎΠΈΡΡ ΡΡΡΠΎΡΠΊΡ Π½Π° Π·Π°ΠΌΠ΅Π½Ρ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ Π³ΡΡΠΏΠΏΠ°Ρ .
Π£ ΡΠ΅Π³ΡΠ»ΡΡΠΎΠΊ Π΅ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°. ΠΠΏΡΠΈΡ i Π΄Π΅Π»Π°Π΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠΊΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ, Π° ΠΎΠΏΡΠΈΡ g Π΄Π΅Π»Π°Π΅Ρ Π΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ, ΡΡΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΠ΅Π³ΠΎ, Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ replace Π·Π°ΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ RegExp ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠΎΠΊ ΠΈΠ· ΡΡΡΠΎΠΊ.
Π Π΅Π³ΡΠ»ΡΡΠΊΠΈ β ΠΎΡΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Ρ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΡΡΠΊΠΎΠΉ. ΠΠ½ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°ΡΡ ΠΎΠ΄Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡ Π½Π΅ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ , ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ. Π§Π°ΡΡΡ ΡΠΌΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠ°ΠΌΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅ΡΡ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»ΡΡΡΡΡ ΠΈΡΠΊΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡ Π½ΡΡΡ Π² Π½ΠΈΡ Π·Π°Π΄Π°ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
ΠΠ΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ, Π²ΠΈΠ΄Ρ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠΎΠΊ. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·ΡΡΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ΅ΡΠ²ΠΈΡ ΡΠΈΠΏΠ° debuggex.com, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ.
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠΉ Π³ΠΎΠ»ΡΡ
Β«ΠΠΎΠ»ΡΡΠΎΠΌΒ» Π² ΠΊΠΎΠ΄Π΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΠ³ΡΡ, Π³Π΄Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠΉ Π³ΠΎΠ»ΡΡ β ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠΎΠΊ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΏΠΎΠ΄ΡΡΡΠΎΡΠ΅ΠΊ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠΊΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΡ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠ΅. Π Π΅Π³ΡΠ»ΡΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ. ΠΠ΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ Π½Π°ΡΡΡΡ Π³ΡΠ°Π½ΠΈΡ ΡΠ»ΠΎΠ², Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ ΠΎΡΠΎΠ±ΠΎ. ΠΠΎΠ³Π΄Π° Ρ Π²Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ°Ρ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠ°, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ.
1 car ΠΈ cat
2 pop ΠΈ prop
3 ferret, ferry, ΠΈ ferrari
4 ΠΡΠ±ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ Π½Π° ious
5 ΠΡΠΎΠ±Π΅Π», Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠ΄ΡΡ ΡΠΎΡΠΊΠ°, Π·Π°ΠΏΡΡΠ°Ρ, Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΎΡΠΊΠ° Ρ Π·Π°ΠΏΡΡΠΎΠΉ.
6 Π‘Π»ΠΎΠ²ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΡΠ΅ΡΡΠΈ Π±ΡΠΊΠ²
7 Π‘Π»ΠΎΠ²ΠΎ Π±Π΅Π· Π±ΡΠΊΠ² e
// ΠΠΏΠΈΡΠΈΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΈ
verify(/.../,
["my car", "bad cats"],
["camper", "high art"]);
verify(/.../,
["pop culture", "mad props"],
["plop"]);
verify(/.../,
["ferret", "ferry", "ferrari"],
["ferrum", "transfer A"]);
verify(/.../,
["how delicious", "spacious room"],
["ruinous", "consciousness"]);
verify(/.../,
["bad punctuation ."],
["escape the dot"]);
verify(/.../,
["hottentottententen"],
["no", "hotten totten tenten"]);
verify(/.../,
["red platypus", "wobbling nest"],
["earth bed", "learning ape"]);
function verify(regexp, yes, no) {
// Ignore unfinished exercises
if (regexp.source == "...") return;
yes.forEach(function(s) {
if (!regexp.test(s))
console.log("ΠΠ΅ Π½Π°ΡΠ»ΠΎΡΡ '" + s + "'");
});
no.forEach(function(s) {
if (regexp.test(s))
console.log("ΠΠ΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ '" + s + "'");
});
}
ΠΠ°Π²ΡΡΠΊΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ°ΡΡΠΊΠ°Π·, ΠΈ Π²Π΅Π·Π΄Π΅ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°Π²ΡΡΠΊΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ² Π½Π° Π΄Π²ΠΎΠΉΠ½ΡΠ΅, ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ Π² ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡΡ ΡΠ»ΠΎΠ² ΡΠΈΠΏΠ° arenβt.
ΠΡΠΈΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½, ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΠΈΠΉ Π΄Π²Π° ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°Π²ΡΡΠ΅ΠΊ, ΠΈ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° replace, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π·Π°ΠΌΠ΅Π½Ρ.
Π‘Π½ΠΎΠ²Π° ΡΠΈΡΠ»Π°
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΎΠΉ /\d+/.
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ»Π°, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΈΠ»Π΅ JavaScript. ΠΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΌΠΈΠ½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ»ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΈΡΠ»ΠΎΠΌ, Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ ΡΠΎΡΠΊΡ, ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ 5e-3 ΠΈΠ»ΠΈ 1E10 β ΠΎΠΏΡΡΡ-ΡΠ°ΠΊΠΈ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ ΠΏΠ»ΡΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΡΡΠΎΠΌ. Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π΄ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΡΠΊΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠ³ΡΡ ΡΡΠΎΡΡΡ ΡΠΈΡΡΡ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΈΡΠ»ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ. Π’ΠΎ Π΅ΡΡΡ, .5 ΠΈΠ»ΠΈ 5. β Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΡΠ»Π°, Π° ΠΎΠ΄Π½Π° ΡΠΎΡΠΊΠ° ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ β Π½Π΅Ρ.
// ΠΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ΄Π° ΡΠ΅Π³ΡΠ»ΡΡΠΊΡ.
var number = /^...$/;
// Tests:
["1", "-1", "+15", "1.55", ".5", "5.", "1.3e2", "1E-4",
"1e+12"].forEach(function(s) {
if (!number.test(s))
console.log("ΠΠ΅ Π½Π°ΡΠ»Π° '" + s + "'");
});
["1a", "+-1", "1.2.3", "1+1", "1e4.5", ".5.", "1f5",
"."].forEach(function(s) {