Skip to content

Capturing groups #441

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 25, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Apply suggestions from code review
  • Loading branch information
dolgachio authored Mar 25, 2023
commit 00907f2a718fd9017b07b2583bee2ba19823a004
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
Двоцифрове шістнадцяткове число можна записати як `pattern:[0-9a-f]{2}`(припустивши, що задано прапор `pattern:i`).
Двоцифрове шістнадцяткове число можна записати як `pattern:[0-9a-f]{2}`(припустивши, що задано прапорець `pattern:i`).

Нам потрібно число `NN`, а за ним `:NN`, повторене 5 разів (більше чисел);

Регулярний вираз: `pattern:[0-9a-f]{2}(:[0-9a-f]{2}){5}`

Тепер продемонструємо, що збіг має захоплювати весь текст: з самого початку до самого кінця. Робиться це через огортання патерну в `pattern:^...$`.
Тепер продемонструємо, що збіг має захоплювати весь текст: з самого початку до самого кінця. Робиться це через огортання виразу в `pattern:^...$`.

В підсумку:

Expand Down
2 changes: 1 addition & 1 deletion 9-regular-expressions/11-regexp-groups/01-test-mac/task.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Перевірити MAC-адресу

[MAC-адреса](https://en.wikipedia.org/wiki/MAC_address) мережевого інтерфейсу складається з 6 двоцифрових чисел шістнадцяткової системи, розділених двокрапкою.
[MAC-адреса](https://uk.wikipedia.org/wiki/MAC-адреса) мережевого інтерфейсу складається з 6 двоцифрових шістнадцяткових чисел, розділених двокрапкою.

Наприклад: `subject:'01:32:54:67:89:AB'`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

Використаємо для цього квантифікатор `pattern:{1,2}`: отримаємо `pattern:/#([a-f0-9]{3}){1,2}/i`.

В цьому випадку, патерн `pattern:[a-f0-9]{3}` оточений дужками для застосування квантифікатора `pattern:{1,2}`.
В цьому випадку, шаблон `pattern:[a-f0-9]{3}` оточений дужками для застосування квантифікатора `pattern:{1,2}`.

На прикладі:
Код у дії:

```js run
let regexp = /#([a-f0-9]{3}){1,2}/gi;
Expand All @@ -16,7 +16,7 @@ let str = "color: #3f3; background-color: #AA00ef; and: #abcd";
alert( str.match(regexp) ); // #3f3 #AA00ef #abc
```

Бачимо невелику проблему: патерн знайшов `match:#abc` в `subject:#abcd`. Для запобігання цьому, додамо в кінці `pattern:\b`:
Бачимо невелику проблему: вираз знайшов `match:#abc` в `subject:#abcd`. Для запобігання цьому, додамо в кінці `pattern:\b`:

```js run
let regexp = /#([a-f0-9]{3}){1,2}\b/gi;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Оператором слугуватиме `pattern:[-+*/]`. Дефіс `pattern:-` стоїть першим в квадратних дужках, бо позиція посередині означає діапазон знаків, тоді як нам потрібен лише `-`.

Варто уникати символу `/` всередині регулярного виразу JavaScript `pattern:/.../`, зробимо це потім.
Символ `/` має бути екранованим всередині регулярного виразу JavaScript `pattern:/.../`, зробимо це потім.

Нам потрібне число, оператор, тоді ще одне число. Та можливі пробіли між ними.

Expand All @@ -15,15 +15,15 @@

Аби зробити кожну з цих частин окремим елементом масиву результатів, помістимо їх в круглі дужки: `pattern:(-?\d+(\.\d+)?)\s*([-+*/])\s*(-?\d+(\.\d+)?)`.

На прикладі:
Код у дії:

```js run
let regexp = /(-?\d+(\.\d+)?)\s*([-+*\/])\s*(-?\d+(\.\d+)?)/;

alert( "1.2 + 12".match(regexp) );
```

Вміст результату:
Розглянемо результат:

- `result[0] == "1.2 + 12"` (повний збіг)
- `result[1] == "1.2"` (перша група `(-?\d+(\.\d+)?)` -- перше число, включаючи десяткову частину)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Парсинг виразу
# Розберіть вираз

Арифметичний вираз складається з двох чисел та оператору між ними, наприклад:

Expand All @@ -11,7 +11,7 @@

Додаткові пробіли можуть бути на початку, в кінці чи всередині виразу.

Напишіть функцію `parse(expr)`, яка приймає вираз та повертає масив з 3 елементів:
Напишіть функцію `parse(expr)`, яка приймає вираз та повертає масив з 3-ьох елементів:

1. Перше число.
2. Оператор.
Expand Down
Loading