From 05bb8959ccbe0d38f4ffe0622bea9399e488b348 Mon Sep 17 00:00:00 2001 From: MrsMelnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Thu, 24 Nov 2022 17:39:09 +0200 Subject: [PATCH 01/24] Sets and ranges [...] --- .../article.md | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index a1b8f896d..f99f83713 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -1,169 +1,169 @@ -# Sets and ranges [...] +# Набори та діапазони [...] -Several characters or character classes inside square brackets `[…]` mean to "search for any character among given". +Декільки символів, або класи символів всередині квадратних дужок `[…]` означають "шукати будь-який символ з-поміж заданих". -## Sets +## Набори -For instance, `pattern:[eao]` means any of the 3 characters: `'a'`, `'e'`, or `'o'`. +До прикладу, `pattern:[eao]` означає будь-який з трьох символів: `'a'`, `'e'`, or `'o'`. -That's called a *set*. Sets can be used in a regexp along with regular characters: +У такий спосіб записується так званий *набір*. Набір може використовуватись в регулярних виразах разом зі звичайними символами: ```js run -// find [t or m], and then "op" +// знайти [t або m], а потім "op" alert( "Mop top".match(/[tm]op/gi) ); // "Mop", "top" ``` -Please note that although there are multiple characters in the set, they correspond to exactly one character in the match. +Зверніть увагу, що незважаючи на те, що в наборі вказано два символи, в результаті є співпадіння лише по одному з них. -So the example below gives no matches: +Тож нижченаведений приклад не знайде співпадінь: ```js run -// find "V", then [o or i], then "la" +// знайти "V", потім [o чи i], потім "la" alert( "Voila".match(/V[oi]la/) ); // null, no matches ``` -The pattern searches for: +Шаблон шукає: - `pattern:V`, -- then *one* of the letters `pattern:[oi]`, -- then `pattern:la`. +- потім *одна* з літер набору `pattern:[oi]`, +- потім `pattern:la`. -So there would be a match for `match:Vola` or `match:Vila`. +Результатом такого пошуку могли б стати варіанти `match:Vola` або `match:Vila`. -## Ranges +## Діапазони -Square brackets may also contain *character ranges*. +Квадратні дужки також можуть містити *діапазони символів*. -For instance, `pattern:[a-z]` is a character in range from `a` to `z`, and `pattern:[0-5]` is a digit from `0` to `5`. +До прикладу, `pattern:[a-z]` шукатиме символу в діапазоні від `a` до `z`, а `pattern:[0-5]` дорівнює цифрам в діапазоні від `0` до `5`. -In the example below we're searching for `"x"` followed by two digits or letters from `A` to `F`: +В нижченаведеному прикладі ми шукатимемо літеру `"x"` за якою слідують дві цифри, або літери від `A` до `F`: ```js run alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF ``` -Here `pattern:[0-9A-F]` has two ranges: it searches for a character that is either a digit from `0` to `9` or a letter from `A` to `F`. +Тут `pattern:[0-9A-F]` має в собі одразу два діапазони: він шукає на символ, який є або цифрою від `0` до `9` , або літерою від `A` до `F`. -If we'd like to look for lowercase letters as well, we can add the range `a-f`: `pattern:[0-9A-Fa-f]`. Or add the flag `pattern:i`. +Якби ми захотіли шукати літери не тільки верхнього, а й нижнього регістру, ми могли б додати діапазон `a-f`: `pattern:[0-9A-Fa-f]`. Або додати флаг `pattern:i`. -We can also use character classes inside `[…]`. +Крім того, всередині `[…]` ми можемо використовувати символьні класи. -For instance, if we'd like to look for a wordly character `pattern:\w` or a hyphen `pattern:-`, then the set is `pattern:[\w-]`. +До прикладу, якщо ми захочемо знайти "символ слова" `pattern:\w` , або дефіс `pattern:-`, набір виглядатиме наступним чином `pattern:[\w-]`. -Combining multiple classes is also possible, e.g. `pattern:[\s\d]` means "a space character or a digit". +Комбінувати декілька класів теж можливо, наприклад `pattern:[\s\d]` означає "пробіл, або цифра". -```smart header="Character classes are shorthands for certain character sets" -For instance: +```smart header="Символьні класи це всього лише скорочення для деяких наборів символів" +До прикладу: -- **\d** -- is the same as `pattern:[0-9]`, -- **\w** -- is the same as `pattern:[a-zA-Z0-9_]`, -- **\s** -- is the same as `pattern:[\t\n\v\f\r ]`, plus few other rare Unicode space characters. +- **\d** -- це те саме, що `pattern:[0-9]`, +- **\w** -- це те саме, що `pattern:[a-zA-Z0-9_]`, +- **\s** -- це те саме, що `pattern:[\t\n\v\f\r ]`, плюс деякілька інших рідких пробільних символів Unicode. ``` -### Example: multi-language \w +### Приклад: \w в інших мовах світу -As the character class `pattern:\w` is a shorthand for `pattern:[a-zA-Z0-9_]`, it can't find Chinese hieroglyphs, Cyrillic letters, etc. +Оскільки символьний клас `pattern:\w` це лише скорочений запис `pattern:[a-zA-Z0-9_]`, він не зможе знайти китайські ієрогліфи, літери кирилицею і т.д. -We can write a more universal pattern, that looks for wordly characters in any language. That's easy with Unicode properties: `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`. +Існує спосіб написати більш універсальний шаблон, що включатиме в себе буквенні символи будь-якої мови світу. Це легко реалізувати завдяки властивостям Unicode: `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`. -Let's decipher it. Similar to `pattern:\w`, we're making a set of our own that includes characters with following Unicode properties: +Давайте розшифруємо цей шаблон. Подібно до `pattern:\w`, ми створюємо свій діапазон, який включає в себе символи з наступними властивостями Unicode: -- `Alphabetic` (`Alpha`) - for letters, -- `Mark` (`M`) - for accents, -- `Decimal_Number` (`Nd`) - for digits, -- `Connector_Punctuation` (`Pc`) - for the underscore `'_'` and similar characters, -- `Join_Control` (`Join_C`) - two special codes `200c` and `200d`, used in ligatures, e.g. in Arabic. +- `Alphabetic` (`Alpha`) - для літер, +- `Mark` (`M`) - для акцентів, +- `Decimal_Number` (`Nd`) - для цифр, +- `Connector_Punctuation` (`Pc`) - для нижнього підкреслення `'_'` і тому подібних символів, +- `Join_Control` (`Join_C`) - два спеціальних коди `200c` та `200d`, які використовуються у лігатурах, зокрема в арабській мові. -An example of use: +Шаблон в дії: ```js run let regexp = /[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]/gu; let str = `Hi 你好 12`; -// finds all letters and digits: +// знайти всі літери та цифри: alert( str.match(regexp) ); // H,i,你,好,1,2 ``` -Of course, we can edit this pattern: add Unicode properties or remove them. Unicode properties are covered in more details in the article . +Звичайно, ми можемо редагувати вищенаведений шаблон: додавати Unicode властивості, або видаляти їх. Дізнатись більше про Unicode властивості можна за посиланням . -```warn header="Unicode properties aren't supported in IE" -Unicode properties `pattern:p{…}` are not implemented in IE. If we really need them, we can use library [XRegExp](http://xregexp.com/). +```warn header="Internet Explorer не підтримує Unicode властивості" +Unicode властивості `pattern:p{…}` недоступні у Internet Explorer. ЯВтім, якщо вони нам все ж потрібні, ми можемо скористатись бібліотекою [XRegExp](http://xregexp.com/). -Or just use ranges of characters in a language that interests us, e.g. `pattern:[а-я]` for Cyrillic letters. +або просто вказати діапазон потрібних нам символів певною мовою, наприклад `pattern:[а-я]` для літер кирилицею. ``` -## Excluding ranges +## Діапазони виключень -Besides normal ranges, there are "excluding" ranges that look like `pattern:[^…]`. +Окрім звичайни діапазонів, існують діапазони "виключень" які виглядають наступним чином: `pattern:[^…]`. -They are denoted by a caret character `^` at the start and match any character *except the given ones*. +Вони відрізняються символом каретки `^` на початку і знаходять будь-який символ *окрім вказаних в діапазоні*. -For instance: +До прикладу: -- `pattern:[^aeyo]` -- any character except `'a'`, `'e'`, `'y'` or `'o'`. -- `pattern:[^0-9]` -- any character except a digit, the same as `pattern:\D`. -- `pattern:[^\s]` -- any non-space character, same as `\S`. +- `pattern:[^aeyo]` -- будь-який символ окрім `'a'`, `'e'`, `'y'` or `'o'`. +- `pattern:[^0-9]` -- будь-який символ окрім цифр, так само як і `pattern:\D`. +- `pattern:[^\s]` -- будь-який не пробільний символ `\S`. -The example below looks for any characters except letters, digits and spaces: +Нижченаведений приклад шукає будь-який символ окрім літер латиницею, цифр та пробільних символів: ```js run -alert( "alice15@gmail.com".match(/[^\d\sA-Z]/gi) ); // @ and . +alert( "alice15@gmail.com".match(/[^\d\sA-Z]/gi) ); // @ та . ``` -## Escaping in […] +## Екранування всередині […] -Usually when we want to find exactly a special character, we need to escape it like `pattern:\.`. And if we need a backslash, then we use `pattern:\\`, and so on. +Зазвичай, коли ми хочемо знайти один зі спец символів, нам потрібно екранувати його наступним чином `pattern:\.`. Тобто, якщо нам потрібна зворотня коса риска, ми маємо писати `pattern:\\`, і так далі. -In square brackets we can use the vast majority of special characters without escaping: +В квадратних дужках ми можемо використовувати велику кількість спец символів без екранування: -- Symbols `pattern:. + ( )` never need escaping. -- A hyphen `pattern:-` is not escaped in the beginning or the end (where it does not define a range). -- A caret `pattern:^` is only escaped in the beginning (where it means exclusion). -- The closing square bracket `pattern:]` is always escaped (if we need to look for that symbol). +- Символ `pattern:. + ( )` не потребує екранування. +- Дефіс `pattern:-` не потребує екранування на початку, або в кінці (тобто коли не може означати діапазон). +- Каретка `pattern:^` екранується лише на початку (без екранування означає набір символів-виключень). +- Закриваюча квадратна дужка `pattern:]` завжди потребує екранування (у випадках, коли нам потрібно знайти цей символ). -In other words, all special characters are allowed without escaping, except when they mean something for square brackets. +Інакше кажучи, всі спец символи можна використовувати без екранування тоді, коли вони не мають додаткового значення в квадратних дужках. -A dot `.` inside square brackets means just a dot. The pattern `pattern:[.,]` would look for one of characters: either a dot or a comma. +Крапка `.` всередині квадратних дужок означає просто крапку. Шаблон `pattern:[.,]` шукатиме на один з двох символів, або крапку, або кому. -In the example below the regexp `pattern:[-().^+]` looks for one of the characters `-().^+`: +В нижченаведеному прикладі регулярний вираз `pattern:[-().^+]` шукає один з вказаних символів `-().^+`: ```js run -// No need to escape +// Не потрібно екранувати let regexp = /[-().^+]/g; -alert( "1 + 2 - 3".match(regexp) ); // Matches +, - +alert( "1 + 2 - 3".match(regexp) ); // Знаходить +, - ``` -...But if you decide to escape them "just in case", then there would be no harm: +...Але якщо ви вирішите все ж таки екранувати їх, "про всяк випадок", гірше від того не буде: ```js run -// Escaped everything +// Всі символи екрановані let regexp = /[\-\(\)\.\^\+]/g; -alert( "1 + 2 - 3".match(regexp) ); // also works: +, - +alert( "1 + 2 - 3".match(regexp) ); // так само находить: +, - ``` -## Ranges and flag "u" +## Діапазони і прапор "u" -If there are surrogate pairs in the set, flag `pattern:u` is required for them to work correctly. +Якщо в діапазоні є сурогатні пари, для коректної роботи регулярного виразу, прапор `pattern:u` є обов'язковим. -For instance, let's look for `pattern:[𝒳𝒴]` in the string `subject:𝒳`: +До прикладу, давайте знайдемо `pattern:[𝒳𝒴]` у рядку `subject:𝒳`: ```js run -alert( '𝒳'.match(/[𝒳𝒴]/) ); // shows a strange character, like [?] -// (the search was performed incorrectly, half-character returned) +alert( '𝒳'.match(/[𝒳𝒴]/) ); // виводить дивний символ, схожий на [?] +// (пошук було виконано некореткно, повернуто тільки половину символу) ``` -The result is incorrect, because by default regular expressions "don't know" about surrogate pairs. +Результат є некоректним, оскільки за замовчуванням регулярні вирази "не знають" про сурогатні пари. -The regular expression engine thinks that `[𝒳𝒴]` -- are not two, but four characters: -1. left half of `𝒳` `(1)`, -2. right half of `𝒳` `(2)`, -3. left half of `𝒴` `(3)`, -4. right half of `𝒴` `(4)`. +Регулярний вираз сприймає `[𝒳𝒴]` -- не як два, а як чотири символи: +1. ліва половина `𝒳` `(1)`, +2. права половина `𝒳` `(2)`, +3. ліва половина `𝒴` `(3)`, +4. права половина `𝒴` `(4)`. -We can see their codes like this: +Якщо вивести їх кодове значення ми побачимо наступне: ```js run for(let i=0; i<'𝒳𝒴'.length; i++) { @@ -171,27 +171,27 @@ for(let i=0; i<'𝒳𝒴'.length; i++) { }; ``` -So, the example above finds and shows the left half of `𝒳`. +Отже, вищенаведений приклад знайшов і вивів ліву половину `𝒳`. -If we add flag `pattern:u`, then the behavior will be correct: +Якщо ми додамо прапор `pattern:u`, то поведінка буде коректною: ```js run alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳 ``` -The similar situation occurs when looking for a range, such as `[𝒳-𝒴]`. +Подібна ситуація складається коли ми шукаємо в діапазоні, наприклад `[𝒳-𝒴]`. -If we forget to add flag `pattern:u`, there will be an error: +Якщо ми забудемо додати прапор `pattern:u`, то отримаємо помилку: ```js run '𝒳'.match(/[𝒳-𝒴]/); // Error: Invalid regular expression ``` -The reason is that without flag `pattern:u` surrogate pairs are perceived as two characters, so `[𝒳-𝒴]` is interpreted as `[<55349><56499>-<55349><56500>]` (every surrogate pair is replaced with its codes). Now it's easy to see that the range `56499-55349` is invalid: its starting code `56499` is greater than the end `55349`. That's the formal reason for the error. +Причина в тому, що без прапору `pattern:u` сурогатні пари сприймаються як два окремих символи, тобто `[𝒳-𝒴]` оброблюються як `[<55349><56499>-<55349><56500>]` (кожна сурогатна пара замінюється на набір кодів). Таким чином, ми бачимо, що діапазон `56499-55349` є некоректним: його початковий номер `56499` більший за останній `55349`. Це і є причиною помилки. -With the flag `pattern:u` the pattern works correctly: +З прапором `pattern:u` шаблон працює коректно: ```js run -// look for characters from 𝒳 to 𝒵 +// шукає символи від 𝒳 до 𝒵 alert( '𝒴'.match(/[𝒳-𝒵]/u) ); // 𝒴 ``` From a38fb86ef0e966acd8e6498120be73a5e08b975b Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:08 +0200 Subject: [PATCH 02/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index f99f83713..f93779ea5 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -42,7 +42,7 @@ alert( "Voila".match(/V[oi]la/) ); // null, no matches alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF ``` -Тут `pattern:[0-9A-F]` має в собі одразу два діапазони: він шукає на символ, який є або цифрою від `0` до `9` , або літерою від `A` до `F`. +Тут `pattern:[0-9A-F]` має в собі одразу два діапазони: він шукає символ, який є або цифрою від `0` до `9` , або літерою від `A` до `F`. Якби ми захотіли шукати літери не тільки верхнього, а й нижнього регістру, ми могли б додати діапазон `a-f`: `pattern:[0-9A-Fa-f]`. Або додати флаг `pattern:i`. From a2981670c0c4e88387f031162f99496ff6efdaea Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:18 +0200 Subject: [PATCH 03/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index f93779ea5..55313eca8 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -48,7 +48,7 @@ alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF Крім того, всередині `[…]` ми можемо використовувати символьні класи. -До прикладу, якщо ми захочемо знайти "символ слова" `pattern:\w` , або дефіс `pattern:-`, набір виглядатиме наступним чином `pattern:[\w-]`. +До прикладу, якщо ми захочемо знайти символ "слова" `pattern:\w` , або дефіс `pattern:-`, набір виглядатиме наступним чином `pattern:[\w-]`. Комбінувати декілька класів теж можливо, наприклад `pattern:[\s\d]` означає "пробіл, або цифра". From be0ffd71df15a93f88d77763d63d72d42de6fbcc Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:27 +0200 Subject: [PATCH 04/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index 55313eca8..d4b5ae338 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -52,7 +52,7 @@ alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF Комбінувати декілька класів теж можливо, наприклад `pattern:[\s\d]` означає "пробіл, або цифра". -```smart header="Символьні класи це всього лише скорочення для деяких наборів символів" +```smart header="Символьні класи це лише скорочення для деяких наборів символів" До прикладу: - **\d** -- це те саме, що `pattern:[0-9]`, From e0510a8b29819145b31e8141fdcccdcd80fb31f5 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:34 +0200 Subject: [PATCH 05/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index d4b5ae338..423d8112d 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -55,7 +55,7 @@ alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF ```smart header="Символьні класи це лише скорочення для деяких наборів символів" До прикладу: -- **\d** -- це те саме, що `pattern:[0-9]`, +- **\d** -- це те саме, що й `pattern:[0-9]`, - **\w** -- це те саме, що `pattern:[a-zA-Z0-9_]`, - **\s** -- це те саме, що `pattern:[\t\n\v\f\r ]`, плюс деякілька інших рідких пробільних символів Unicode. ``` From e8715320ef4fc6bb659b4e25a84b6a78a01dde5a Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:42 +0200 Subject: [PATCH 06/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index 423d8112d..5842c7c04 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -56,7 +56,7 @@ alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF До прикладу: - **\d** -- це те саме, що й `pattern:[0-9]`, -- **\w** -- це те саме, що `pattern:[a-zA-Z0-9_]`, +- **\w** -- це те саме, що й `pattern:[a-zA-Z0-9_]`, - **\s** -- це те саме, що `pattern:[\t\n\v\f\r ]`, плюс деякілька інших рідких пробільних символів Unicode. ``` From 120682963806e40a7883d348b76f5e6db9128ced Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:49 +0200 Subject: [PATCH 07/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index 5842c7c04..550b2ea26 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -146,7 +146,7 @@ alert( "1 + 2 - 3".match(regexp) ); // так само находить: +, - ## Діапазони і прапор "u" -Якщо в діапазоні є сурогатні пари, для коректної роботи регулярного виразу, прапор `pattern:u` є обов'язковим. +Якщо в діапазоні є сурогатні пари, для коректної роботи регулярного виразу, прапорець `pattern:u` є обов'язковим. До прикладу, давайте знайдемо `pattern:[𝒳𝒴]` у рядку `subject:𝒳`: From 579dc3b928afd812b80e8b3bf978b80a98ed0cc2 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:33:57 +0200 Subject: [PATCH 08/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index 550b2ea26..d80779d3c 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -173,7 +173,7 @@ for(let i=0; i<'𝒳𝒴'.length; i++) { Отже, вищенаведений приклад знайшов і вивів ліву половину `𝒳`. -Якщо ми додамо прапор `pattern:u`, то поведінка буде коректною: +Якщо ми додамо прапорець `pattern:u`, то поведінка буде коректною: ```js run alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳 From 8f67d1d6642c81f755f8ae27aaccbec01b8ca2ca Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:34:04 +0200 Subject: [PATCH 09/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index d80779d3c..b6f68e422 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -181,7 +181,7 @@ alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳 Подібна ситуація складається коли ми шукаємо в діапазоні, наприклад `[𝒳-𝒴]`. -Якщо ми забудемо додати прапор `pattern:u`, то отримаємо помилку: +Якщо ми забудемо додати прапорець `pattern:u`, то отримаємо помилку: ```js run '𝒳'.match(/[𝒳-𝒴]/); // Error: Invalid regular expression From aeeda3ae3f798ec3781e2e019d5fe5cfeb675280 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:34:09 +0200 Subject: [PATCH 10/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index b6f68e422..9bd803cb8 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -187,7 +187,7 @@ alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳 '𝒳'.match(/[𝒳-𝒴]/); // Error: Invalid regular expression ``` -Причина в тому, що без прапору `pattern:u` сурогатні пари сприймаються як два окремих символи, тобто `[𝒳-𝒴]` оброблюються як `[<55349><56499>-<55349><56500>]` (кожна сурогатна пара замінюється на набір кодів). Таким чином, ми бачимо, що діапазон `56499-55349` є некоректним: його початковий номер `56499` більший за останній `55349`. Це і є причиною помилки. +Причина в тому, що без прапорцю `pattern:u` сурогатні пари сприймаються як два окремих символи, тобто `[𝒳-𝒴]` обробляються як `[<55349><56499>-<55349><56500>]` (кожна сурогатна пара замінюється на набір кодів). Таким чином, ми бачимо, що діапазон `56499-55349` є некоректним: його початковий номер `56499` більший за останній `55349`. Це і є причиною помилки. З прапором `pattern:u` шаблон працює коректно: From 600e01f7eb42a1b30e24f02589b8c5e9139ba91e Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:34:16 +0200 Subject: [PATCH 11/24] Update 9-regular-expressions/08-regexp-character-sets-and-ranges/article.md Co-authored-by: Stanislav --- .../08-regexp-character-sets-and-ranges/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index 9bd803cb8..303124a43 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -189,7 +189,7 @@ alert( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳 Причина в тому, що без прапорцю `pattern:u` сурогатні пари сприймаються як два окремих символи, тобто `[𝒳-𝒴]` обробляються як `[<55349><56499>-<55349><56500>]` (кожна сурогатна пара замінюється на набір кодів). Таким чином, ми бачимо, що діапазон `56499-55349` є некоректним: його початковий номер `56499` більший за останній `55349`. Це і є причиною помилки. -З прапором `pattern:u` шаблон працює коректно: +З прапорцем `pattern:u` шаблон працює коректно: ```js run // шукає символи від 𝒳 до 𝒵 From c02a73051aad00074da513190dba4ba53573c031 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:36:55 +0200 Subject: [PATCH 12/24] Update solution.md --- .../2-find-time-2-formats/solution.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md index 69ade1b19..7ea45c310 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md @@ -1,4 +1,4 @@ -Answer: `pattern:\d\d[-:]\d\d`. +Відповідь: `pattern:\d\d[-:]\d\d`. ```js run let regexp = /\d\d[-:]\d\d/g; From d5189882eda893f34e9f5e79972f7eea47f68733 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:41:04 +0200 Subject: [PATCH 13/24] Update solution.md --- .../2-find-time-2-formats/solution.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md index 7ea45c310..ec1b16fe6 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md @@ -5,4 +5,4 @@ let regexp = /\d\d[-:]\d\d/g; alert( "Breakfast at 09:00. Dinner at 21-30".match(regexp) ); // 09:00, 21-30 ``` -Please note that the dash `pattern:'-'` has a special meaning in square brackets, but only between other characters, not when it's in the beginning or at the end, so we don't need to escape it. +Зверніть увагу, що риска `pattern:'-'` має спеціальне значення у квартратних дужкахб але тільки між іншими символами, не на початку чи в кінці виразу, тож немає необхідності її екранувати. From b5ee3bdb70fa4dd2051695f595f47f81294eb963 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:41:35 +0200 Subject: [PATCH 14/24] Update solution.md --- .../2-find-time-2-formats/solution.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md index ec1b16fe6..d1e53155c 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md @@ -2,7 +2,7 @@ ```js run let regexp = /\d\d[-:]\d\d/g; -alert( "Breakfast at 09:00. Dinner at 21-30".match(regexp) ); // 09:00, 21-30 +alert( "Сніданок о 09:00. Вечеря о 21-30".match(regexp) ); // 09:00, 21-30 ``` Зверніть увагу, що риска `pattern:'-'` має спеціальне значення у квартратних дужкахб але тільки між іншими символами, не на початку чи в кінці виразу, тож немає необхідності її екранувати. From a519a464eb0311b25ce42fb0d38bc7097e8f9827 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:44:53 +0200 Subject: [PATCH 15/24] Update task.md --- .../2-find-time-2-formats/task.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md index c8441caf4..49ddd42ca 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md @@ -1,12 +1,12 @@ -# Find the time as hh:mm or hh-mm +# Знайдіть часовий формат hh:mm або hh-mm -The time can be in the format `hours:minutes` or `hours-minutes`. Both hours and minutes have 2 digits: `09:00` or `21-30`. +Час можна записати у форматі `години:хвилини` or `години-хвилини`. В будь-яку з варіантів потрібні дві цифри на позначення годин і хвилин: `09:00` або `21-30`. -Write a regexp to find time: +Напишіть регулярний вираз для пошуку часового формату: ```js let regexp = /your regexp/g; -alert( "Breakfast at 09:00. Dinner at 21-30".match(regexp) ); // 09:00, 21-30 +alert( "Сніданок о 09:00. Вечеря о 21-30".match(regexp) ); // 09:00, 21-30 ``` -P.S. In this task we assume that the time is always correct, there's no need to filter out bad strings like "45:67". Later we'll deal with that too. +P.S. В цій задачі ми завжди маємо коректний час, не потрібно перевіряти неіснуючі комбінації цифр, як-то "45:67". Пізніше ми роглянемо і такі випадки. From fb140a895eef2117e609396f686d5a5859bc0526 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:47:52 +0200 Subject: [PATCH 16/24] Update solution.md --- .../1-find-range-1/solution.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md index 85c7748f7..66bff8503 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md @@ -1,11 +1,11 @@ -Answers: **no, yes**. +Відповідь: **ні, так**. -- In the script `subject:Java` it doesn't match anything, because `pattern:[^script]` means "any character except given ones". So the regexp looks for `"Java"` followed by one such symbol, but there's a string end, no symbols after it. +- В скрипті `subject:Java` немає співпадінь, оскільки `pattern:[^script]` означає "пошук будь-яких символів окрім заданих". Тож регулярний вираз шукає `"Java"` за яким слідує один такий символ, але це кінець рядку і далі немає символів. ```js run alert( "Java".match(/Java[^script]/) ); // null ``` -- Yes, because the `pattern:[^script]` part matches the character `"S"`. It's not one of `pattern:script`. As the regexp is case-sensitive (no `pattern:i` flag), it treats `"S"` as a different character from `"s"`. +- Так, оскільки частина патерну `pattern:[^script]` співпадає з символом `"S"`. Його немає в переліку `pattern:script`. Оскільки регулярний вираз розрізняє регістри букв (не вказаний прапорець `pattern:i`), то для нього `"S"`та `"s"` це різні символи. ```js run alert( "JavaScript".match(/Java[^script]/) ); // "JavaS" From aded3d3b8edad6ba1039dda8ef404900397cfba8 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:48:34 +0200 Subject: [PATCH 17/24] Update task.md --- .../1-find-range-1/task.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/task.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/task.md index 5a48e01e7..88d4d9781 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/task.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/task.md @@ -1,5 +1,5 @@ # Java[^script] -We have a regexp `pattern:/Java[^script]/`. +У нас є регулярний вираз `pattern:/Java[^script]/`. -Does it match anything in the string `subject:Java`? In the string `subject:JavaScript`? +Чи знайде він співпадіння у рядку `subject:Java`? А у рядку `subject:JavaScript`? From fb5e78b622c5ecc3f5be975648413f13c21d6a43 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:54:36 +0200 Subject: [PATCH 18/24] Update task.md --- .../09-regexp-quantifiers/1-find-text-manydots/task.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md index 4140b4a98..0ef9b4ee9 100644 --- a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md +++ b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md @@ -2,11 +2,11 @@ importance: 5 --- -# How to find an ellipsis "..." ? +# Як знайти розділовий знак три крапки "..." ? -Create a regexp to find ellipsis: 3 (or more?) dots in a row. +Створіть регулярний вираз, який знайде розділовий знак три крапки: 3 (чи навіть більше?) крапок у ряд. -Check it: +Перевірте: ```js let regexp = /your regexp/g; From cf8bba9220366e73ef39c58911523924e959f1eb Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:57:35 +0200 Subject: [PATCH 19/24] Update solution.md --- .../09-regexp-quantifiers/1-find-text-manydots/solution.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md index 21b8762ec..7bf5f7574 100644 --- a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md +++ b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md @@ -1,9 +1,9 @@ -Solution: +Відповідь: ```js run let regexp = /\.{3,}/g; -alert( "Hello!... How goes?.....".match(regexp) ); // ..., ..... +alert( "Привіт!... Як справи?.....".match(regexp) ); // ..., ..... ``` -Please note that the dot is a special character, so we have to escape it and insert as `\.`. +Зауважте, що крапка це спец символ, тож потребує екранування за допомогою `\.`. From a44dbbf7bf5bd4d7b012785cfc97d5be24760484 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:57:55 +0200 Subject: [PATCH 20/24] Update task.md --- .../09-regexp-quantifiers/1-find-text-manydots/task.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md index 0ef9b4ee9..c663d261b 100644 --- a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md +++ b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md @@ -10,5 +10,5 @@ importance: 5 ```js let regexp = /your regexp/g; -alert( "Hello!... How goes?.....".match(regexp) ); // ..., ..... +alert( "Привіт!... Як справи?.....".match(regexp) ); // ..., ..... ``` From 67f9e710fb237d00a8a2aba85f39377533fc491d Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:01:10 +0200 Subject: [PATCH 21/24] Update task.md --- .../2-find-html-colors-6hex/task.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md index 9a1923a7e..8bf9c4c44 100644 --- a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md +++ b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md @@ -1,15 +1,15 @@ -# Regexp for HTML colors +# Регулярний вираз для кольорів в HTML -Create a regexp to search HTML-colors written as `#ABCDEF`: first `#` and then 6 hexadecimal characters. +Створіть регулярний вираз, який шукає HTML-кольори записані у форматі `#ABCDEF`: спершу символ `#` за яким слідують 6 шістнадцяткових символів. -An example of use: +Приклад використання: ```js -let regexp = /...your regexp.../ +let regexp = /...ваш регулярний вираз.../ let str = "color:#121212; background-color:#AA00ef bad-colors:f#fddee #fd2 #12345678"; alert( str.match(regexp) ) // #121212,#AA00ef ``` -P.S. In this task we do not need other color formats like `#123` or `rgb(1,2,3)` etc. +P.S. В цій задачі нам не потрібно враховувати інші формати запису кольорів, як наприклад `#123` або `rgb(1,2,3)` і т.д.. From 7f5a6e0a163236f7e482a8b264b672f4c0f4e7d9 Mon Sep 17 00:00:00 2001 From: Mariana Melnychenko <110090508+MrsMelnychenko@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:05:38 +0200 Subject: [PATCH 22/24] Update solution.md --- .../2-find-html-colors-6hex/solution.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md index afee89c50..aff659e63 100644 --- a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md +++ b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md @@ -1,10 +1,10 @@ -We need to look for `#` followed by 6 hexadecimal characters. +Нам потрбіно знайти символ `#` за яким слідують 6 шістнадцяткових символів. -A hexadecimal character can be described as `pattern:[0-9a-fA-F]`. Or if we use the `pattern:i` flag, then just `pattern:[0-9a-f]`. +Шістнадцятковий символ можна описати як `pattern:[0-9a-fA-F]`. Або, якщо застосувати прапорець `pattern:i` , то запис скоротиться до `pattern:[0-9a-f]`. -Then we can look for 6 of them using the quantifier `pattern:{6}`. +Далі ми позначимо за допомогою квантифікатора, що нам потрібно саме 6 таких шістнадцяткових символів `pattern:{6}`. -As a result, we have the regexp: `pattern:/#[a-f0-9]{6}/gi`. +І у результаті, отримаємо такий регулярний вираз: `pattern:/#[a-f0-9]{6}/gi`. ```js run let regexp = /#[a-f0-9]{6}/gi; @@ -14,18 +14,17 @@ let str = "color:#121212; background-color:#AA00ef bad-colors:f#fddee #fd2" alert( str.match(regexp) ); // #121212,#AA00ef ``` -The problem is that it finds the color in longer sequences: - +Проблема в тому, що вищевказаний регулярний вираз знаходитиме код кольору навіть у довших послідовностях. ```js run alert( "#12345678".match( /#[a-f0-9]{6}/gi ) ) // #123456 ``` -To fix that, we can add `pattern:\b` to the end: +Щоб виправити це, ми додамо `pattern:\b` на кінці виразу: ```js run -// color +// колір alert( "#123456".match( /#[a-f0-9]{6}\b/gi ) ); // #123456 -// not a color +// не колір alert( "#12345678".match( /#[a-f0-9]{6}\b/gi ) ); // null ``` From f7c1581a1c55d7215196f7c0b1397826549be88b Mon Sep 17 00:00:00 2001 From: Stanislav Date: Wed, 4 Jan 2023 14:04:11 +0200 Subject: [PATCH 23/24] Apply suggestions from code review --- .../1-find-range-1/solution.md | 2 +- .../2-find-time-2-formats/solution.md | 2 +- .../2-find-time-2-formats/task.md | 2 +- .../09-regexp-quantifiers/1-find-text-manydots/solution.md | 2 +- .../09-regexp-quantifiers/1-find-text-manydots/task.md | 2 +- .../09-regexp-quantifiers/2-find-html-colors-6hex/solution.md | 3 ++- .../09-regexp-quantifiers/2-find-html-colors-6hex/task.md | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md index 66bff8503..5d02d6e2c 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/1-find-range-1/solution.md @@ -5,7 +5,7 @@ ```js run alert( "Java".match(/Java[^script]/) ); // null ``` -- Так, оскільки частина патерну `pattern:[^script]` співпадає з символом `"S"`. Його немає в переліку `pattern:script`. Оскільки регулярний вираз розрізняє регістри букв (не вказаний прапорець `pattern:i`), то для нього `"S"`та `"s"` це різні символи. +- Так, оскільки частина патерну `pattern:[^script]` співпадає з символом `"S"`. Його немає в переліку `pattern:script`. Бо регулярний вираз розрізняє регістри букв (не вказаний прапорець `pattern:i`), то для нього `"S"`та `"s"` це різні символи. ```js run alert( "JavaScript".match(/Java[^script]/) ); // "JavaS" diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md index d1e53155c..f93cce12f 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/solution.md @@ -5,4 +5,4 @@ let regexp = /\d\d[-:]\d\d/g; alert( "Сніданок о 09:00. Вечеря о 21-30".match(regexp) ); // 09:00, 21-30 ``` -Зверніть увагу, що риска `pattern:'-'` має спеціальне значення у квартратних дужкахб але тільки між іншими символами, не на початку чи в кінці виразу, тож немає необхідності її екранувати. +Зверніть увагу, що риска `pattern:'-'` має спеціальне значення у квадратних дужках але тільки між іншими символами, не на початку чи в кінці виразу, тож немає необхідності її екранувати. diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md index 49ddd42ca..503f2c345 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/2-find-time-2-formats/task.md @@ -1,6 +1,6 @@ # Знайдіть часовий формат hh:mm або hh-mm -Час можна записати у форматі `години:хвилини` or `години-хвилини`. В будь-яку з варіантів потрібні дві цифри на позначення годин і хвилин: `09:00` або `21-30`. +Час можна записати у форматі `години:хвилини` або `години-хвилини`. У будь-якому разі потрібні дві цифри для позначення годин і хвилин: `09:00` або `21-30`. Напишіть регулярний вираз для пошуку часового формату: diff --git a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md index 7bf5f7574..bdbb48f16 100644 --- a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md +++ b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/solution.md @@ -6,4 +6,4 @@ let regexp = /\.{3,}/g; alert( "Привіт!... Як справи?.....".match(regexp) ); // ..., ..... ``` -Зауважте, що крапка це спец символ, тож потребує екранування за допомогою `\.`. +Зауважте, що крапка це спецсимвол, тож потребує екранування за допомогою `\.`. diff --git a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md index c663d261b..f2e32a839 100644 --- a/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md +++ b/9-regular-expressions/09-regexp-quantifiers/1-find-text-manydots/task.md @@ -4,7 +4,7 @@ importance: 5 # Як знайти розділовий знак три крапки "..." ? -Створіть регулярний вираз, який знайде розділовий знак три крапки: 3 (чи навіть більше?) крапок у ряд. +Створіть регулярний вираз, який знайде розділовий знак три крапки: 3 (чи навіть більше?) крапок поспіль. Перевірте: diff --git a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md index aff659e63..5526a1896 100644 --- a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md +++ b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/solution.md @@ -15,11 +15,12 @@ alert( str.match(regexp) ); // #121212,#AA00ef ``` Проблема в тому, що вищевказаний регулярний вираз знаходитиме код кольору навіть у довших послідовностях. + ```js run alert( "#12345678".match( /#[a-f0-9]{6}/gi ) ) // #123456 ``` -Щоб виправити це, ми додамо `pattern:\b` на кінці виразу: +Щоб виправити це, ми додамо `pattern:\b` у кінці виразу: ```js run // колір diff --git a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md index 8bf9c4c44..d932c2984 100644 --- a/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md +++ b/9-regular-expressions/09-regexp-quantifiers/2-find-html-colors-6hex/task.md @@ -12,4 +12,4 @@ let str = "color:#121212; background-color:#AA00ef bad-colors:f#fddee #fd2 #1234 alert( str.match(regexp) ) // #121212,#AA00ef ``` -P.S. В цій задачі нам не потрібно враховувати інші формати запису кольорів, як наприклад `#123` або `rgb(1,2,3)` і т.д.. +P.S. В цій задачі нам не потрібно враховувати інші формати запису кольорів, як наприклад `#123` або `rgb(1,2,3)` тощо. From 46430798eeb6ab0e7c603501008b765254440e01 Mon Sep 17 00:00:00 2001 From: Stanislav Date: Wed, 4 Jan 2023 14:05:57 +0200 Subject: [PATCH 24/24] Apply suggestions from code review --- .../article.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md index 303124a43..8db4b9b22 100644 --- a/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md +++ b/9-regular-expressions/08-regexp-character-sets-and-ranges/article.md @@ -57,12 +57,12 @@ alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) ); // xAF - **\d** -- це те саме, що й `pattern:[0-9]`, - **\w** -- це те саме, що й `pattern:[a-zA-Z0-9_]`, -- **\s** -- це те саме, що `pattern:[\t\n\v\f\r ]`, плюс деякілька інших рідких пробільних символів Unicode. +- **\s** -- це те саме, що й `pattern:[\t\n\v\f\r ]`, плюс декілька інших рідкісних пробільних символів Unicode. ``` ### Приклад: \w в інших мовах світу -Оскільки символьний клас `pattern:\w` це лише скорочений запис `pattern:[a-zA-Z0-9_]`, він не зможе знайти китайські ієрогліфи, літери кирилицею і т.д. +Оскільки символьний клас `pattern:\w` це лише скорочений запис `pattern:[a-zA-Z0-9_]`, він не зможе знайти китайські ієрогліфи, літери кирилицею тощо. Існує спосіб написати більш універсальний шаблон, що включатиме в себе буквенні символи будь-якої мови світу. Це легко реалізувати завдяки властивостям Unicode: `pattern:[\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]`. @@ -88,14 +88,14 @@ alert( str.match(regexp) ); // H,i,你,好,1,2 Звичайно, ми можемо редагувати вищенаведений шаблон: додавати Unicode властивості, або видаляти їх. Дізнатись більше про Unicode властивості можна за посиланням . ```warn header="Internet Explorer не підтримує Unicode властивості" -Unicode властивості `pattern:p{…}` недоступні у Internet Explorer. ЯВтім, якщо вони нам все ж потрібні, ми можемо скористатись бібліотекою [XRegExp](http://xregexp.com/). +Unicode властивості `pattern:p{…}` недоступні у Internet Explorer. Втім, якщо вони нам все ж потрібні, ми можемо скористатись бібліотекою [XRegExp](http://xregexp.com/). -або просто вказати діапазон потрібних нам символів певною мовою, наприклад `pattern:[а-я]` для літер кирилицею. +або просто вказати діапазон потрібних нам символів певною мовою, наприклад `pattern:[а-я]` для літер кирилицею. ``` ## Діапазони виключень -Окрім звичайни діапазонів, існують діапазони "виключень" які виглядають наступним чином: `pattern:[^…]`. +Окрім звичайних діапазонів, існують діапазони "виключень" які виглядають наступним чином: `pattern:[^…]`. Вони відрізняються символом каретки `^` на початку і знаходять будь-який символ *окрім вказаних в діапазоні*. @@ -113,16 +113,16 @@ alert( "alice15@gmail.com".match(/[^\d\sA-Z]/gi) ); // @ та . ## Екранування всередині […] -Зазвичай, коли ми хочемо знайти один зі спец символів, нам потрібно екранувати його наступним чином `pattern:\.`. Тобто, якщо нам потрібна зворотня коса риска, ми маємо писати `pattern:\\`, і так далі. +Зазвичай, коли ми хочемо знайти один зі спецсимволів, нам потрібно екранувати його наступним чином `pattern:\.`. Тобто, якщо нам потрібна зворотня коса риска, ми маємо писати `pattern:\\`, і так далі. -В квадратних дужках ми можемо використовувати велику кількість спец символів без екранування: +В квадратних дужках ми можемо використовувати велику кількість спецсимволів без екранування: - Символ `pattern:. + ( )` не потребує екранування. - Дефіс `pattern:-` не потребує екранування на початку, або в кінці (тобто коли не може означати діапазон). - Каретка `pattern:^` екранується лише на початку (без екранування означає набір символів-виключень). - Закриваюча квадратна дужка `pattern:]` завжди потребує екранування (у випадках, коли нам потрібно знайти цей символ). -Інакше кажучи, всі спец символи можна використовувати без екранування тоді, коли вони не мають додаткового значення в квадратних дужках. +Інакше кажучи, всі спецсимволи можна використовувати без екранування тоді, коли вони не мають додаткового значення в квадратних дужках. Крапка `.` всередині квадратних дужок означає просто крапку. Шаблон `pattern:[.,]` шукатиме на один з двох символів, або крапку, або кому. @@ -144,7 +144,7 @@ let regexp = /[\-\(\)\.\^\+]/g; alert( "1 + 2 - 3".match(regexp) ); // так само находить: +, - ``` -## Діапазони і прапор "u" +## Діапазони і прапорець "u" Якщо в діапазоні є сурогатні пари, для коректної роботи регулярного виразу, прапорець `pattern:u` є обов'язковим. @@ -155,7 +155,7 @@ alert( '𝒳'.match(/[𝒳𝒴]/) ); // виводить дивний симво // (пошук було виконано некореткно, повернуто тільки половину символу) ``` -Результат є некоректним, оскільки за замовчуванням регулярні вирази "не знають" про сурогатні пари. +Результат є некоректним, оскільки типово регулярні вирази "не знають" про сурогатні пари. Регулярний вираз сприймає `[𝒳𝒴]` -- не як два, а як чотири символи: 1. ліва половина `𝒳` `(1)`, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy