Skip to content

Commit 4a6ea85

Browse files
Update article.md
1 parent c6db8fd commit 4a6ea85

File tree

1 file changed

+52
-53
lines changed
  • 9-regular-expressions/09-regexp-quantifiers

1 file changed

+52
-53
lines changed
Lines changed: 52 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,141 @@
1-
# Quantifiers +, *, ? and {n}
1+
# Квантифікатори +, *, ? та {n}
22

3-
Let's say we have a string like `+7(903)-123-45-67` and want to find all numbers in it. But unlike before, we are interested not in single digits, but full numbers: `7, 903, 123, 45, 67`.
3+
Припустимо, у нас є рядок `+38(067)-123-45-67` і нам потрібно знайти всі числа в ньому. Але цього разу, на відміну від попередніх, нас цікавлять не поодинокі цифри, а саме числа : `38, 067, 123, 45, 67`.
44

5-
A number is a sequence of 1 or more digits `pattern:\d`. To mark how many we need, we can append a *quantifier*.
5+
Число це послідовність з 1, або більше цифр `pattern:\d` і щоб позначити потрібну нам кількість, ми можемо застосувати *квантифікатор*.
66

7-
## Quantity {n}
7+
## Кількість {n}
88

9-
The simplest quantifier is a number in curly braces: `pattern:{n}`.
9+
Найпростішим квантифікатором є число у фігурних дужках: `pattern:{n}`.
1010

11-
A quantifier is appended to a character (or a character class, or a `[...]` set etc) and specifies how many we need.
11+
Квантифікатор додається до символу(або класу символів, набору `[...]`, тощо) і позначає яка їх кількість нам потрібна.
12+
Існує декілька способів використання квантифікатора, розглянемо на прикладах:
1213

13-
It has a few advanced forms, let's see examples:
14+
Точна кількість: `pattern:{5}`
15+
: `pattern:\d{5}` означає точно 5 цифр, так само як і `pattern:\d\d\d\d\d`.
1416

15-
The exact count: `pattern:{5}`
16-
: `pattern:\d{5}` denotes exactly 5 digits, the same as `pattern:\d\d\d\d\d`.
17-
18-
The example below looks for a 5-digit number:
17+
Нижченаведений приклад шукатиме число, яке складається з 5-ти цифр:
1918

2019
```js run
21-
alert( "I'm 12345 years old".match(/\d{5}/) ); // "12345"
20+
alert( "Мені 12345 років".match(/\d{5}/) ); // "12345"
2221
```
2322

24-
We can add `\b` to exclude longer numbers: `pattern:\b\d{5}\b`.
23+
Ми могли б додати `\b` і таким чином вилучити з пошуку числа довші за наш шаблон: `pattern:\b\d{5}\b`.
2524

26-
The range: `pattern:{3,5}`, match 3-5 times
27-
: To find numbers from 3 to 5 digits we can put the limits into curly braces: `pattern:\d{3,5}`
25+
Діапазон: `pattern:{3,5}`, від 3 до 5
26+
: Щоб знайти числа, які складаються з мінімум 3 і максимум 5 чисел, ми можемо вказати потрібні обмеження у фігурних дужках: `pattern:\d{3,5}`
2827

2928
```js run
30-
alert( "I'm not 12, but 1234 years old".match(/\d{3,5}/) ); // "1234"
29+
alert( "Мені не 12 років, а 1234".match(/\d{3,5}/) ); // "1234"
3130
```
3231

33-
We can omit the upper limit.
32+
Ми можемо не вказувати верхню межу.
3433

35-
Then a regexp `pattern:\d{3,}` looks for sequences of digits of length `3` or more:
34+
В такому випадку, регулярний вираз `pattern:\d{3,}` шукатиме послідовність цифр довжиною від `3` і/або більше:
3635

3736
```js run
38-
alert( "I'm not 12, but 345678 years old".match(/\d{3,}/) ); // "345678"
37+
alert( "Мені не 12, а 345678 років".match(/\d{3,}/) ); // "345678"
3938
```
4039

41-
Let's return to the string `+7(903)-123-45-67`.
40+
Давайте повернемось до рядка `+38(067)-123-45-67`.
4241

43-
A number is a sequence of one or more digits in a row. So the regexp is `pattern:\d{1,}`:
42+
Число це послідовність з однієї або більше цифр підряд. Таким чином, регулярний вираз виглядатиме `pattern:\d{1,}`:
4443

4544
```js run
46-
let str = "+7(903)-123-45-67";
45+
let str = "+38(067)-123-45-67";
4746

4847
let numbers = str.match(/\d{1,}/g);
4948

50-
alert(numbers); // 7,903,123,45,67
49+
alert(numbers); // 38,067,123,45,67
5150
```
5251

53-
## Shorthands
52+
## Скорочення
5453

55-
There are shorthands for most used quantifiers:
54+
Існують способи скорочено записати більшу частину часто вживаних квантифікаторів:
5655

5756
`pattern:+`
58-
: Means "one or more", the same as `pattern:{1,}`.
57+
: Означає "один, або більше", так само як і `pattern:{1,}`.
5958

60-
For instance, `pattern:\d+` looks for numbers:
59+
До прикладу, `pattern:\d+` шукає числа, які складаються з однієї, або більше цифр:
6160

6261
```js run
63-
let str = "+7(903)-123-45-67";
62+
let str = "+38(067)-123-45-67";
6463

65-
alert( str.match(/\d+/g) ); // 7,903,123,45,67
64+
alert( str.match(/\d+/g) ); // 38,067,123,45,67
6665
```
6766

6867
`pattern:?`
69-
: Means "zero or one", the same as `pattern:{0,1}`. In other words, it makes the symbol optional.
68+
: Означає "нуль, або один", так само як і `pattern:{0,1}`. Інакше кажучи, в такий спосіб ми робимо символ необов'язковим.
7069

71-
For instance, the pattern `pattern:ou?r` looks for `match:o` followed by zero or one `match:u`, and then `match:r`.
70+
До прикладу, шаблон `pattern:ou?r` шукатиме літеру `match:o` після якої, можливо, йтиме літера `match:u`, і потім літера `match:r`.
7271

73-
So, `pattern:colou?r` finds both `match:color` and `match:colour`:
72+
І таким чином, `pattern:colou?r` знайде обидва слова `match:color` та `match:colour`:
7473

7574
```js run
76-
let str = "Should I write color or colour?";
75+
let str = "Англійською слово колір пишеться як color чи colour?";
7776

7877
alert( str.match(/colou?r/g) ); // color, colour
7978
```
8079

8180
`pattern:*`
82-
: Means "zero or more", the same as `pattern:{0,}`. That is, the character may repeat any times or be absent.
81+
: Означає "нуль, або більше", так само, як і `pattern:{0,}`. Це означає, що символ може бути відсутнім, або повторюватись безліч разів.
8382

84-
For example, `pattern:\d0*` looks for a digit followed by any number of zeroes (may be many or none):
83+
До прикладу, `pattern:\d0*` шукає цифру, після якої йде будь-яка кількість нулів (може бути багато, або жодного):
8584

8685
```js run
8786
alert( "100 10 1".match(/\d0*/g) ); // 100, 10, 1
8887
```
8988

90-
Compare it with `pattern:+` (one or more):
89+
Порівняйте з `pattern:+` (один, або більше):
9190

9291
```js run
9392
alert( "100 10 1".match(/\d0+/g) ); // 100, 10
94-
// 1 not matched, as 0+ requires at least one zero
93+
// Регулярний вираз не знайшов 1, оскільки 0+ вимагає наявності щонайменше одного нуля
9594
```
9695

97-
## More examples
96+
## Більше прикладів
9897

99-
Quantifiers are used very often. They serve as the main "building block" of complex regular expressions, so let's see more examples.
98+
Квантифікатори використовують дуже часто. Вони основні "будівельні блоки" складних регулярних виразів, тож розглянемо ще декілька прикладів.
10099

101-
**Regexp for decimal fractions (a number with a floating point): `pattern:\d+\.\d+`**
100+
**Регулярний вираз для десяткових дробів (чисел з плаваючою комою): `pattern:\d+\.\d+`**
102101

103-
In action:
102+
В дії:
104103
```js run
105104
alert( "0 1 12.345 7890".match(/\d+\.\d+/g) ); // 12.345
106105
```
107106

108-
**Regexp for an "opening HTML-tag without attributes", such as `<span>` or `<p>`.**
107+
**Регулярний вираз для "відкриваючого HTML-тегу без атрибутів", наприклад, `<span>`, або `<p>`.**
109108

110-
1. The simplest one: `pattern:/<[a-z]+>/i`
109+
1. Найпростіший варіант: `pattern:/<[a-z]+>/i`
111110

112111
```js run
113112
alert( "<body> ... </body>".match(/<[a-z]+>/gi) ); // <body>
114113
```
115114

116-
The regexp looks for character `pattern:'<'` followed by one or more Latin letters, and then `pattern:'>'`.
115+
Регулярний вираз шукає символ `pattern:'<'` після якого йдуть одна, або більше літер латиницею, а потім `pattern:'>'`.
117116

118-
2. Improved: `pattern:/<[a-z][a-z0-9]*>/i`
117+
2. Покращений варіант: `pattern:/<[a-z][a-z0-9]*>/i`
119118

120-
According to the standard, HTML tag name may have a digit at any position except the first one, like `<h1>`.
119+
Згідно стандарту, назва HTML-тегу може містити в собі і цифру на будь-якій позиції окрім першої, як наприклад `<h1>`.
121120

122121
```js run
123122
alert( "<h1>Hi!</h1>".match(/<[a-z][a-z0-9]*>/gi) ); // <h1>
124123
```
125124

126-
**Regexp "opening or closing HTML-tag without attributes": `pattern:/<\/?[a-z][a-z0-9]*>/i`**
125+
**Регулярний вираз "відкриваючого, або закриваючого HTML-тегу без атрибутів": `pattern:/<\/?[a-z][a-z0-9]*>/i`**
127126

128-
We added an optional slash `pattern:/?` near the beginning of the pattern. Had to escape it with a backslash, otherwise JavaScript would think it is the pattern end.
127+
Ми додали необов'язковий слеш `pattern:/?` на початку шаблону і для того, щоб JavaScript не сприйняв його як кінець регулярного виразу, нам довелось його екранувати.
129128
130129
```js run
131130
alert( "<h1>Hi!</h1>".match(/<\/?[a-z][a-z0-9]*>/gi) ); // <h1>, </h1>
132131
```
133132
134-
```smart header="To make a regexp more precise, we often need make it more complex"
135-
We can see one common rule in these examples: the more precise is the regular expression -- the longer and more complex it is.
133+
```smart header="Щоб зробити регулярний вираз більш точний, нам часто доводиться його ускладнювати"
134+
На прикладах ми побачили, що більш точним є регулярний вираз, тим довшим і складнішим є його реалізація.
136135
137-
For instance, for HTML tags we could use a simpler regexp: `pattern:<\w+>`. But as HTML has stricter restrictions for a tag name, `pattern:<[a-z][a-z0-9]*>` is more reliable.
136+
До прикладу, для HTML-тегів без атрибутів ми могли б використати простіший регулярний вираз: `pattern:<\w+>`. Але так як HTML має більш жорсткі вимоги до назв тегів, то шаблон `pattern:<[a-z][a-z0-9]*>` буде більш точним.
138137
139-
Can we use `pattern:<\w+>` or we need `pattern:<[a-z][a-z0-9]*>`?
138+
Чи можемо ми використовувати `pattern:<\w+>` чи краще писати `pattern:<[a-z][a-z0-9]*>`?
140139
141-
In real life both variants are acceptable. Depends on how tolerant we can be to "extra" matches and whether it's difficult or not to remove them from the result by other means.
140+
в реальному життя обидва варіанти мають право на існування. Все залежить від того, чи готові ми допустити "зайві" співпадіння з нашим регулярний виразом і наскілльки важко, або легко буде відфільтрувати їх і отримати перелік потрібних нам співпадінь.
142141
```

0 commit comments

Comments
 (0)