From aaba2b16c6e661cf94605736a88b8c171b264369 Mon Sep 17 00:00:00 2001 From: vladko Date: Sat, 17 Sep 2022 22:43:30 +0300 Subject: [PATCH 1/3] Translated article alternation --- .../01-find-programming-language/solution.md | 18 +++--- .../01-find-programming-language/task.md | 6 +- .../02-find-matching-bbtags/solution.md | 10 ++-- .../02-find-matching-bbtags/task.md | 30 +++++----- .../03-match-quoted-string/solution.md | 18 +++--- .../03-match-quoted-string/task.md | 32 +++++----- .../04-match-exact-tag/solution.md | 10 ++-- .../04-match-exact-tag/task.md | 10 ++-- .../13-regexp-alternation/article.md | 60 +++++++++---------- 9 files changed, 97 insertions(+), 97 deletions(-) diff --git a/9-regular-expressions/13-regexp-alternation/01-find-programming-language/solution.md b/9-regular-expressions/13-regexp-alternation/01-find-programming-language/solution.md index e33f9cf2f..e6e2551a7 100644 --- a/9-regular-expressions/13-regexp-alternation/01-find-programming-language/solution.md +++ b/9-regular-expressions/13-regexp-alternation/01-find-programming-language/solution.md @@ -1,7 +1,7 @@ -The first idea can be to list the languages with `|` in-between. +Перше, що може прийти на думку - перерахувати мови, розділивши їх за допомогою `|`. -But that doesn't work right: +Однак, це не спрацює так, як нам потрібно: ```js run let regexp = /Java|JavaScript|PHP|C|C\+\+/g; @@ -11,18 +11,18 @@ let str = "Java, JavaScript, PHP, C, C++"; alert( str.match(regexp) ); // Java,Java,PHP,C,C ``` -The regular expression engine looks for alternations one-by-one. That is: first it checks if we have `match:Java`, otherwise -- looks for `match:JavaScript` and so on. +Механізм регулярних виразів шукає альтернації одну за одною. Тобто, спочатку він перевіряє, чи маємо ми `match:Java`, якщо немає -- шукає `match:JavaScript` і так далі. -As a result, `match:JavaScript` can never be found, just because `match:Java` is checked first. +У результаті, `match:JavaScript` ніколи не буде знайден, лише тому що `match:Java` перевіряється першою. -The same with `match:C` and `match:C++`. +Так само і з мовами `match:C` та `match:C++`. -There are two solutions for that problem: +Існує два розв'язання цієї проблеми: -1. Change the order to check the longer match first: `pattern:JavaScript|Java|C\+\+|C|PHP`. -2. Merge variants with the same start: `pattern:Java(Script)?|C(\+\+)?|PHP`. +1. Змінити порядок, щоб спочатку перевірялись довші співпадіння: `pattern:JavaScript|Java|C\+\+|C|PHP`. +2. З'єднати варіанти, які починаються однаково: `pattern:Java(Script)?|C(\+\+)?|PHP`. -In action: +У дії: ```js run let regexp = /Java(Script)?|C(\+\+)?|PHP/g; diff --git a/9-regular-expressions/13-regexp-alternation/01-find-programming-language/task.md b/9-regular-expressions/13-regexp-alternation/01-find-programming-language/task.md index e0f7af95c..bff45df20 100644 --- a/9-regular-expressions/13-regexp-alternation/01-find-programming-language/task.md +++ b/9-regular-expressions/13-regexp-alternation/01-find-programming-language/task.md @@ -1,8 +1,8 @@ -# Find programming languages +# Знайдіть мову програмування -There are many programming languages, for instance Java, JavaScript, PHP, C, C++. +Існує багато мов програмування, наприклад Java, JavaScript, PHP, C, C++. -Create a regexp that finds them in the string `subject:Java JavaScript PHP C++ C`: +Напишіть регулярний вираз, який знаходить вищезгадані мови у рядку `subject:Java JavaScript PHP C++ C`: ```js let regexp = /your regexp/g; diff --git a/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/solution.md b/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/solution.md index fb6682b6b..d9673e1f5 100644 --- a/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/solution.md +++ b/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/solution.md @@ -1,11 +1,11 @@ -Opening tag is `pattern:\[(b|url|quote)]`. +Відкриваючий тег - це `pattern:\[(b|url|quote)]`. -Then to find everything till the closing tag -- let's use the pattern `pattern:.*?` with flag `pattern:s` to match any character including the newline and then add a backreference to the closing tag. +Потім, щоб знайти все, до закриваючого тегу -- використаємо вираз `pattern:.*?` з прапорцем `pattern:s` щоб знайти будь-які символи, включно з новим рядком, а потім додати зворотне посилання до закриваючого тегу. -The full pattern: `pattern:\[(b|url|quote)\].*?\[/\1]`. +Цілий вираз: `pattern:\[(b|url|quote)\].*?\[/\1]`. -In action: +У дії: ```js run let regexp = /\[(b|url|quote)].*?\[\/\1]/gs; @@ -20,4 +20,4 @@ let str = ` alert( str.match(regexp) ); // [b]hello![/b],[quote][url]http://google.com[/url][/quote] ``` -Please note that besides escaping `pattern:[`, we had to escape a slash for the closing tag `pattern:[\/\1]`, because normally the slash closes the pattern. +Зверніть увагу, що крім екранування `pattern:[`, нам необхідно екранувати слеш у закриваючому тегу `pattern:[\/\1]`, бо зазвичай слеш завершує вираз. diff --git a/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/task.md b/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/task.md index 72d715afd..f01119632 100644 --- a/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/task.md +++ b/9-regular-expressions/13-regexp-alternation/02-find-matching-bbtags/task.md @@ -1,47 +1,47 @@ -# Find bbtag pairs +# Знайдіть пари ВВ-кодів -A "bb-tag" looks like `[tag]...[/tag]`, where `tag` is one of: `b`, `url` or `quote`. +ВВ-код має вигляд `[tag]...[/tag]`, де `tag` - це один з: `b`, `url` або `quote`. -For instance: +Наприклад: ``` -[b]text[/b] +[b]текст[/b] [url]http://google.com[/url] ``` -BB-tags can be nested. But a tag can't be nested into itself, for instance: +ВВ-коди можуть бути вкладеними. Але тег не може бути вкладеним сам у себе, наприклад: ``` -Normal: +Може бути: [url] [b]http://google.com[/b] [/url] -[quote] [b]text[/b] [/quote] +[quote] [b]текст[/b] [/quote] -Can't happen: +Не може бути: [b][b]text[/b][/b] ``` -Tags can contain line breaks, that's normal: +Теги можуть мати розрив рядків, це допустимо: ``` [quote] - [b]text[/b] + [b]текст[/b] [/quote] ``` -Create a regexp to find all BB-tags with their contents. +Створіть регулярний вираз для пошуку всіх BB-кодів та їх вмісту. -For instance: +Наприклад: ```js -let regexp = /your regexp/flags; +let regexp = /ваш регулярний вираз/прапорець; let str = "..[url]http://google.com[/url].."; alert( str.match(regexp) ); // [url]http://google.com[/url] ``` -If tags are nested, then we need the outer tag (if we want we can continue the search in its content): +Якщо теки вкладені, тоді необхідно шукати зовнішній тег (за бажанням, можна продовжити пошук у його вмісті): ```js -let regexp = /your regexp/flags; +let regexp = /ваш регулярний вираз/прапорець; let str = "..[url][b]http://google.com[/b][/url].."; alert( str.match(regexp) ); // [url][b]http://google.com[/b][/url] diff --git a/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/solution.md b/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/solution.md index 2749f3ff0..5455c7f2f 100644 --- a/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/solution.md +++ b/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/solution.md @@ -1,17 +1,17 @@ -The solution: `pattern:/"(\\.|[^"\\])*"/g`. +Вирішення: `pattern:/"(\\.|[^"\\])*"/g`. -Step by step: +Крок за кроком: -- First we look for an opening quote `pattern:"` -- Then if we have a backslash `pattern:\\` (we have to double it in the pattern because it is a special character), then any character is fine after it (a dot). -- Otherwise we take any character except a quote (that would mean the end of the string) and a backslash (to prevent lonely backslashes, the backslash is only used with some other symbol after it): `pattern:[^"\\]` -- ...And so on till the closing quote. +- Спочатку шукаємо відкриваючі лапки `pattern:"` +- Потім, якщо є зворотній слеш `pattern:\\` (ми повинні подвоїти його у виразі, тому що це спеціальний символ), то після нього також підійде будь-який символ (крапка). +- В іншому випадку, беремо будь-який символ, крім лапок (це означало б кінець рядка) та зворотнього слешу (щоб запобігти поодиноким зворотнім слешам, бо вони використовуються тільки з іншими символами після них): `pattern:[^"\\]` +- ...І так далі, до закриваючих лапок. -In action: +У дії: ```js run let regexp = /"(\\.|[^"\\])*"/g; -let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. '; +let str = ' .. "протестуй мене" .. "Скажи \\"Привіт\\"!" .. "\\\\ \\"" .. '; -alert( str.match(regexp) ); // "test me","Say \"Hello\"!","\\ \"" +alert( str.match(regexp) ); // "протестуй мене","Скажи \"Привіт\"!","\\ \"" ``` diff --git a/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/task.md b/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/task.md index ad41d91b1..096fa22f8 100644 --- a/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/task.md +++ b/9-regular-expressions/13-regexp-alternation/03-match-quoted-string/task.md @@ -1,32 +1,32 @@ -# Find quoted strings +# Знайдіть рядки у лапках -Create a regexp to find strings in double quotes `subject:"..."`. +Створіть регулярний вираз для пошуку рядків у подвійних лапках `subject:"..."`. -The strings should support escaping, the same way as JavaScript strings do. For instance, quotes can be inserted as `subject:\"` a newline as `subject:\n`, and the slash itself as `subject:\\`. +Рядки повинні підтримувати екранування за допомогою зворотнього слеша, аналогічно з рядками в JavaScript. Наприклад, лапки можуть бути вставлені як `subject:\"`, новий рядок як `subject:\n`, та сам зворотній слеш як `subject:\\`. ```js -let str = "Just like \"here\"."; +let str = "Як ось \"тут\"."; ``` -Please note, in particular, that an escaped quote `subject:\"` does not end a string. +Зокрема, зверніть увагу, що екрановані лапки `subject:\"` не завершують рядок. -So we should search from one quote to the other ignoring escaped quotes on the way. +Тому нам необхідно шукати від одних лапок до інших, ігноруючи екрановані лапки на нашому шляху. -That's the essential part of the task, otherwise it would be trivial. +У цьому і полягає основна складність завдання, адже без цієї умови - вирішення було б елементарним. -Examples of strings to match: +Приклади відповідних рядків: ```js -.. *!*"test me"*/!* .. -.. *!*"Say \"Hello\"!"*/!* ... (escaped quotes inside) -.. *!*"\\"*/!* .. (double slash inside) -.. *!*"\\ \""*/!* .. (double slash and an escaped quote inside) +.. *!*"протестуй мене"*/!* .. +.. *!*"Скажи \"Привіт\"!"*/!* ... (екрановані рядки всередині) +.. *!*"\\"*/!* .. (подвійний слеш всередині) +.. *!*"\\ \""*/!* .. (подвійний слеш та екрановані лапки всередині) ``` -In JavaScript we need to double the slashes to pass them right into the string, like this: +У JavaScript нам потрібно подвоювати слеші, щоб передати їх в рядок, як тут: ```js run -let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. '; +let str = ' .. "протестуй мене" .. "Скажи \\"Привіт\\"!" .. "\\\\ \\"" .. '; -// the in-memory string -alert(str); // .. "test me" .. "Say \"Hello\"!" .. "\\ \"" .. +// Рядок у пам'яті +alert(str); // .. "протестуй мене" .. "Скажи \"Привіт\"!" .. "\\ \"" .. ``` diff --git a/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/solution.md b/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/solution.md index 5d4ba8d96..0ed42b200 100644 --- a/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/solution.md +++ b/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/solution.md @@ -1,13 +1,13 @@ -The pattern start is obvious: `pattern:`, because `match:` would match it. +...Однак далі, ми не можемо просто прописати `pattern:`, тому що `match:` відповідає цьому виразу. -We need either a space after `match:`. +Потім, після `match:`. -In the regexp language: `pattern:|\s.*?>)`. +Мовою регулярних виразів: `pattern:|\s.*?>)`. -In action: +У дії: ```js run let regexp = /|\s.*?>)/g; diff --git a/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/task.md b/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/task.md index e8a9e31b4..fa1a224db 100644 --- a/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/task.md +++ b/9-regular-expressions/13-regexp-alternation/04-match-exact-tag/task.md @@ -1,13 +1,13 @@ -# Find the full tag +# Знайдіть цілий тег -Write a regexp to find the tag ``. It should match the full tag: it may have no attributes `