Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ JavaScriptΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 34

Автор ΠœΠ°Ρ€Π΅ΠΉΠ½ Π₯Π°Π²Π΅Ρ€Π±Π΅ΠΊΠ΅

    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) {