diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md index ebc12689d..1c9408c67 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md @@ -1,9 +1,9 @@ -The regexp for an integer number is `pattern:\d+`. +Регулярний вираз для цілого числа `pattern:\d+`. -We can exclude negatives by prepending it with the negative lookbehind: `pattern:(?` tag, we must first find it. We can use the regular expression pattern `pattern:` for that. +Щоб вставити після тегу `` , нам потрібно спершу його знайти. Ми можемо використати для цього регулярний вираз `pattern:`. -In this task we don't need to modify the `` tag. We only need to add the text after it. +в цьому завданні нам не потрібно змінювати тег ``. Нам потрібно тільки додати текст після нього. -Here's how we can do it: +Ось таким чином ми можемо це зробити: ```js run let str = '......'; -str = str.replace(//, '$&

Hello

'); +str = str.replace(//, '$&

Привіт

'); -alert(str); // ...

Hello

... +alert(str); // ...

Привіт

... ``` -In the replacement string `$&` means the match itself, that is, the part of the source text that corresponds to `pattern:`. It gets replaced by itself plus `

Hello

`. +в заміненому рядку `$&` означає співпадіння саме по собі, тобто, частина вихідного тексту яка відповідає шаблону `pattern:`. Її замінено на неї ж плюс `

Привіт

`. -An alternative is to use lookbehind: +Альнернативою було би використання зворотньої перевірки: ```js run let str = '......'; -str = str.replace(/(?<=)/, `

Hello

`); +str = str.replace(/(?<=)/, `

Привіт

`); -alert(str); // ...

Hello

... +alert(str); // ...

Привіт

... ``` -As you can see, there's only lookbehind part in this regexp. +Як бачите, в цьому регулярному виразі є тільки зворотня перевірка. -It works like this: -- At every position in the text. +Це працює таким чином: +- На кожній позиції в тексті. - Check if it's preceeded by `pattern:`. - If it's so then we have the match. diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md index be1a259f6..05b42daf7 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md @@ -1,13 +1,13 @@ -# Insert After Head +# Вставка після Head -We have a string with an HTML Document. +У нас є рядок з HTML-документом. -Write a regular expression that inserts `

Hello

` immediately after `` tag. The tag may have attributes. +Напишіть регулярний вираз який вставляє `

Привіт

` одразу після тегу ``. Тег може мати атрибути. -For instance: +Приклад: ```js -let regexp = /your regular expression/; +let regexp = /ваш регулярний вираз/; let str = ` @@ -17,13 +17,13 @@ let str = ` `; -str = str.replace(regexp, `

Hello

`); +str = str.replace(regexp, `

Привіт

`); ``` -After that the value of `str` should be: +Після цього значення `str` має бути: ```html -

Hello

+

Привіт

... diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index cee8215f9..d6dd00cfe 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -1,134 +1,134 @@ -# Lookahead and lookbehind +# Перевірка уперед та назад -Sometimes we need to find only those matches for a pattern that are followed or preceded by another pattern. +Іноді, нам потрібно знайти тільки такі співпадіння з шаблоном, за якими слідує, або яким передує інший шаблон. -There's a special syntax for that, called "lookahead" and "lookbehind", together referred to as "lookaround". +Для цього існують спеціальні синтаксичні конструкції, котрі називається "перевірка уперед" та "перевірка назад". -For the start, let's find the price from the string like `subject:1 turkey costs 30€`. That is: a number, followed by `subject:€` sign. +Для початку, давайте знайдемо ціну у рядку `subject:1 індичка коштує 30€`. Маємо: число, за яким йде символ `subject:€`. -## Lookahead +## Перевірка уперед -The syntax is: `pattern:X(?=Y)`, it means "look for `pattern:X`, but match only if followed by `pattern:Y`". There may be any pattern instead of `pattern:X` and `pattern:Y`. +Синтаксис виглядає наступнм чином: `pattern:X(?=Y)`, це означає "шукай `pattern:X`, але вважай його співпадінням, тільки якщо за ним слідує `pattern:Y`". Замість `pattern:X` та `pattern:Y` можуть бути будь-які інші шаблони. -For an integer number followed by `subject:€`, the regexp will be `pattern:\d+(?=€)`: +Для цілого числа, за яким слідує `subject:€`, регулярний вираз виглядатиме наступним чином `pattern:\d+(?=€)`: ```js run -let str = "1 turkey costs 30€"; +let str = "1 індичка коштує 30€"; -alert( str.match(/\d+(?=€)/) ); // 30, the number 1 is ignored, as it's not followed by € +alert( str.match(/\d+(?=€)/) ); // 30, число 1 ігнорується, оскільки після нього не стоїть символ € ``` -Please note: the lookahead is merely a test, the contents of the parentheses `pattern:(?=...)` is not included in the result `match:30`. +Зверніть увагу: перевірка уперед це свого роду тест, вміст в дужках `pattern:(?=...)` не входить до відображуваного регулярним виразом співпадіння `match:30`. -When we look for `pattern:X(?=Y)`, the regular expression engine finds `pattern:X` and then checks if there's `pattern:Y` immediately after it. If it's not so, then the potential match is skipped, and the search continues. +Коли ми шукаємо `pattern:X(?=Y)`, регулярний вираз знаходить `pattern:X` і далі перевіряє наявність `pattern:Y` одразу після нього. Якщо це не так, тоді потенційне співпадіння пропускається і регулярний вираз продовжує пошук. -More complex tests are possible, e.g. `pattern:X(?=Y)(?=Z)` means: +Можливі і більш складні тести, наприклад `pattern:X(?=Y)(?=Z)` означає: -1. Find `pattern:X`. -2. Check if `pattern:Y` is immediately after `pattern:X` (skip if isn't). -3. Check if `pattern:Z` is also immediately after `pattern:X` (skip if isn't). -4. If both tests passed, then the `pattern:X` is a match, otherwise continue searching. +1. Знайди `pattern:X`. +2. Перевір, чи `pattern:Y` йде одразу після `pattern:X` (пропускай, якщо це не так). +3. Перевір, чи `pattern:Z` також йде одразу після `pattern:X` (пропускай, якщо це не так). +4. Якщо обидва тести пройдено, тоді `pattern:X` відповідає умовам пошуку, в інщому випадку -- продовжуй пошук. -In other words, such pattern means that we're looking for `pattern:X` followed by `pattern:Y` and `pattern:Z` at the same time. +Інакше кажучи, такий шаблон означає, що ми шукаємо на `pattern:X` за яким одночасно слідують `pattern:Y` та `pattern:Z`. -That's only possible if patterns `pattern:Y` and `pattern:Z` aren't mutually exclusive. +Це можливо тільки за умови, якщо шаблон `pattern:Y` та `pattern:Z` не виключають один одного. -For example, `pattern:\d+(?=\s)(?=.*30)` looks for `pattern:\d+` that is followed by a space `pattern:(?=\s)`, and there's `30` somewhere after it `pattern:(?=.*30)`: +Наприклад, `pattern:\d+(?=\s)(?=.*30)` шукає на `pattern:\d+` за яким йде пробільний символ `pattern:(?=\s)`, а також `30` десь після нього `pattern:(?=.*30)`: ```js run -let str = "1 turkey costs 30€"; +let str = "1 індичка коштує 30€"; alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1 ``` -In our string that exactly matches the number `1`. +В нашому рядку цим параметрам повністю відповідає число `1`. -## Negative lookahead +## Негативна перевірка уперед -Let's say that we want a quantity instead, not a price from the same string. That's a number `pattern:\d+`, NOT followed by `subject:€`. +Скажімо, ми хочем знайти кількість, а не ціну в тому самому рядку. Тобто, шукаємо число `pattern:\d+`, за якийм НЕ слідує `subject:€`. -For that, a negative lookahead can be applied. +В такому випадку, доречним буде використання негативної перевірки уперед. -The syntax is: `pattern:X(?!Y)`, it means "search `pattern:X`, but only if not followed by `pattern:Y`". +Синтаксис виглядає наступним чином: `pattern:X(?!Y)`, і означає "шукай `pattern:X`, але за умови, що після нього не йде `pattern:Y`". ```js run -let str = "2 turkeys cost 60€"; +let str = "2 індички коштують 60€"; -alert( str.match(/\d+\b(?!€)/g) ); // 2 (the price is not matched) +alert( str.match(/\d+\b(?!€)/g) ); // 2 (ціна не відповідає вимогам шаблону і не відображається в результаті) ``` -## Lookbehind +## Перевірка назад -```warn header="Lookbehind browser compatibility" -Please Note: Lookbehind is not supported in non-V8 browsers, such as Safari, Internet Explorer. +```warn header="Сумісність браузерів з перевіркою назад" +Зверніть увагу: Перевірка назад не підтримується в браузерах з відміннимим від V8 двигунами, зокрема Safari, Internet Explorer. ``` -Lookahead allows to add a condition for "what follows". +Перевірка уперед дозволяє додати умову на кшталт "те, що слідує після". -Lookbehind is similar, but it looks behind. That is, it allows to match a pattern only if there's something before it. +Перевірка назад подібна, але дивиться у зворотньому напрямку. Таким чином, вона видає результат, тільки якщо співпадає і шаблон і те, що йде до нього. -The syntax is: -- Positive lookbehind: `pattern:(?<=Y)X`, matches `pattern:X`, but only if there's `pattern:Y` before it. -- Negative lookbehind: `pattern:(? 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