URL: http://github.com/javascript-tutorial/uk.javascript.info/pull/439.diff
ачає "шукай `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:(?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: