Skip to content

Commit a789175

Browse files
committed
Translate article, task 1, task 2
1 parent d905dbe commit a789175

5 files changed

Lines changed: 125 additions & 47 deletions

File tree

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1+
Единственной подходящей строкой будет пустая: она начинается и в тот же момент заканчивается.
12

2-
The empty string is the only match: it starts and immediately finishes.
3+
Это задание еще раз показывает что якори являются не символами, а тестами.
34

4-
The task once again demonstrates that anchors are not characters, but tests.
5-
6-
The string is empty `""`. The engine first matches the `pattern:^` (input start), yes it's there, and then immediately the end `pattern:$`, it's here too. So there's a match.
5+
Строка `""` пустая. Движок пытается найти совпадение с `pattern:^` (начало ввода), да, оно на месте, и в тот же момент ищет совпадение с `pattern:$`, оно тоже на месте. То есть это полное совпадение.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
# Regexp ^$
1+
# Регулярное выражение ^$
22

3-
Which string matches the pattern `pattern:^$`?
3+
Какая строка подойдет под шаблон `pattern:^$`?
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
A two-digit hex number is `pattern:[0-9a-f]{2}` (assuming the `pattern:i` flag is enabled).
1+
Двузначное шестнадцатеричное число это `pattern:[0-9a-f]{2}` (предполагается что флаг `pattern:i` включен).
22

3-
We need that number `NN`, and then `:NN` repeated 5 times (more numbers);
3+
Нам нужно число `NN`, после которого, `:NN` повторяется 5 раз (остальные числа).
44

5-
The regexp is: `pattern:[0-9a-f]{2}(:[0-9a-f]{2}){5}`
5+
Регулярное выражение: `pattern:[0-9a-f]{2}(:[0-9a-f]{2}){5}`
66

7-
Now let's show that the match should capture all the text: start at the beginning and end at the end. That's done by wrapping the pattern in `pattern:^...$`.
7+
Теперь, давайте покажем что шаблон должен захватить весь текст (всю строку): начиная от начала и заканчивая концом. Для этого обернем шаблон в `pattern:^...$`.
88

9-
Finally:
9+
10+
Итог:
1011

1112
```js run
1213
let reg = /^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$/i;
1314

1415
alert( reg.test('01:32:54:67:89:AB') ); // true
1516

16-
alert( reg.test('0132546789AB') ); // false (no colons)
17+
alert( reg.test('0132546789AB') ); // false (нет двоеточий)
1718

18-
alert( reg.test('01:32:54:67:89') ); // false (5 numbers, need 6)
19+
alert( reg.test('01:32:54:67:89') ); // false (5 чисел, должно быть 6)
1920

20-
alert( reg.test('01:32:54:67:89:ZZ') ) // false (ZZ in the end)
21+
alert( reg.test('01:32:54:67:89:ZZ') ) // false (ZZ в конце строки)
2122
```
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
# Check MAC-address
1+
# Проверьте MAC-адрес
22

3-
[MAC-address](https://en.wikipedia.org/wiki/MAC_address) of a network interface consists of 6 two-digit hex numbers separated by a colon.
3+
[MAC-адрес](https://ru.wikipedia.org/wiki/MAC_address) сетевого интерфейса состоит из 6-ти двузначных шестнадцатеричных чисел, разделенных двоеточиями.
44

5-
For instance: `subject:'01:32:54:67:89:AB'`.
5+
К примеру: `subject:'01:32:54:67:89:AB'`.
66

7-
Write a regexp that checks whether a string is MAC-address.
7+
Напишите регулярное выражение, которое проверит является ли строка MAC-адресом.
88

9-
Usage:
9+
Использование:
1010
```js
11-
let reg = /your regexp/;
11+
let reg = /ваш regexp/;
1212

1313
alert( reg.test('01:32:54:67:89:AB') ); // true
1414

15-
alert( reg.test('0132546789AB') ); // false (no colons)
15+
alert( reg.test('0132546789AB') ); // false (нет двоеточий)
1616

17-
alert( reg.test('01:32:54:67:89') ); // false (5 numbers, must be 6)
17+
alert( reg.test('01:32:54:67:89') ); // false (5 чисел, должно быть 6)
1818

19-
alert( reg.test('01:32:54:67:89:ZZ') ) // false (ZZ ad the end)
19+
alert( reg.test('01:32:54:67:89:ZZ') ) // false (ZZ в конце строки)
2020
```
Lines changed: 102 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,133 @@
1-
# String start ^ and finish $
1+
# Начало строки ^ и конец $
22

3-
The caret `pattern:'^'` and dollar `pattern:'$'` characters have special meaning in a regexp. They are called "anchors".
3+
У символов каретки `pattern:'^'` и доллара `pattern:'$'` есть специальные значения в регулярных выражениях (regexp – англ.). Они называются "якоря" (anchors – англ.).
44

5-
The caret `pattern:^` matches at the beginning of the text, and the dollar `pattern:$` -- in the end.
65

7-
For instance, let's test if the text starts with `Mary`:
6+
Каретка `pattern:^` означает совпадение с началом текста, а доллар `pattern:$` - с концом.
7+
8+
К примеру, давайте проверим начинается ли текст с `Mary`:
89

910
```js run
1011
let str1 = "Mary had a little lamb, it's fleece was white as snow";
11-
let str2 = 'Everywhere Mary went, the lamp was sure to go';
12+
let str2 = "Everywhere Mary went, the lamp was sure to go";
1213

13-
alert( /^Mary/.test(str1) ); // true
14-
alert( /^Mary/.test(str2) ); // false
14+
alert(/^Mary/.test(str1)); // true
15+
alert(/^Mary/.test(str2)); // false
1516
```
1617

17-
The pattern `pattern:^Mary` means: "the string start and then Mary".
18+
Шаблон (pattern – англ.) `pattern:^Mary` означает: "строка начинается, затем идет Mary".
1819

19-
Now let's test whether the text ends with an email.
20+
Теперь, давайте проверим заканчивается ли текст email-ом.
2021

21-
To match an email, we can use a regexp `pattern:[-.\w]+@([\w-]+\.)+[\w-]{2,20}`.
22+
Чтобы найти email, мы используем регулярное выражение `pattern:[-.\w]+@([\w-]+\.)+[\w-]{2,20}`.
2223

23-
To test whether the string ends with the email, let's add `pattern:$` to the pattern:
24+
Чтобы проверить заканчивается ли строка email-ом, давайте добавим `pattern:$` в наш шаблон.
2425

2526
```js run
2627
let reg = /[-.\w]+@([\w-]+\.)+[\w-]{2,20}$/g;
2728

28-
let str1 = 'My email is mail@site.com';
29-
let str2 = 'Everywhere Mary went, the lamp was sure to go';
29+
let str1 = "My email is mail@site.com";
30+
let str2 = "Everywhere Mary went, the lamp was sure to go";
3031

31-
alert( reg.test(str1) ); // true
32-
alert( reg.test(str2) ); // false
32+
alert(reg.test(str1)); // true
33+
alert(reg.test(str2)); // false
3334
```
3435

35-
We can use both anchors together to check whether the string exactly follows the pattern. That's often used for validation.
36+
Мы можем использовать оба якоря вместе, чтобы проверить совпадает ли строка полностью с шаблоном. Это обычно используется для валидации.
37+
38+
К примеру, мы хотим проверить что `str` это цвет в виде `#` и 6 цифр в шестнадцатеричной системе. Шаблоном для такой записи цвета будет `pattern:#[0-9a-f]{6}`
3639

37-
For instance we want to check that `str` is exactly a color in the form `#` plus 6 hex digits. The pattern for the color is `pattern:#[0-9a-f]{6}`.
40+
Чтобы проверить, что _вся строка_ точно подходит, мы добавим `pattern:^...$`:
3841

39-
To check that the *whole string* exactly matches it, we add `pattern:^...$`:
4042

4143
```js run
4244
let str = "#abcdef";
4345

44-
alert( /^#[0-9a-f]{6}$/i.test(str) ); // true
46+
alert(/^#[0-9a-f]{6}$/i.test(str)); // true
4547
```
4648

47-
The regexp engine looks for the text start, then the color, and then immediately the text end. Just what we need.
49+
Движок регулярных выражений будет искать начало текста, потом цвет, и затем сразу конец текста. То что нам и нужно.
4850

49-
```smart header="Anchors have zero length"
50-
Anchors just like `\b` are tests. They have zero-width.
51+
```smart header="У якорей нулевая длина"
52+
Якоря, так же как и `\b` - проверки. У них нулевая ширина.
5153
52-
In other words, they do not match a character, but rather force the regexp engine to check the condition (text start/end).
54+
Другими словами, они не совпадают с символами, но заставляют движок регулярных выражений проверять условия (начало/конец текста).
5355
```
5456

55-
The behavior of anchors changes if there's a flag `pattern:m` (multiline mode). We'll explore it in the next chapter.
57+
Поведения якорей меняется если присутствует флаг `pattern:m` (многострочный режим). Мы узнаем об этом больше в следующей главе.
58+
59+
<!--
60+
61+
Начало строки ^ и конец $
62+
Знак каретки '^' и доллара '$' имеют в регулярном выражении особый смысл. Их называют «якорями» (anchor – англ.).
63+
64+
Каретка ^ совпадает в начале текста, а доллар $ – в конце.
65+
66+
Якоря являются не символами, а проверками.
67+
68+
До этого мы говорили о регулярных выражениях, которые ищут один или несколько символов. Если совпадение есть – эти символы включаются в результат.
69+
70+
А якоря – не такие. Когда поиск ходит до якоря – он проверяет, есть ли соответствие, если есть – продолжает идти по шаблону, не прибавляя ничего к результату.
71+
72+
Каретку ^ обычно используют, чтобы указать, что регулярное выражение необходимо проверить именно с начала текста.
73+
74+
Например, без каретки найдёт все числа:
75+
76+
var str = '100500 попугаев съели 500100 бананов!';
77+
alert( str.match(/\d+/ig) ); // 100500, 500100 (нашло все числа)
78+
А с кареткой – только первое:
79+
80+
81+
82+
var str = '100500 попугаев съели 500100 бананов!';
83+
alert( str.match(/^\d+/ig) ); // 100500 (только в начале строки)
84+
Знак доллара $ используют, чтобы указать, что паттерн должен заканчиваться в конце текста.
85+
86+
Аналогичный пример с долларом для поиска числа в конце:
87+
88+
var str = '100500 попугаев съели 500100';
89+
alert( str.match(/\d+$/ig) ); // 500100
90+
Оба якоря используют одновременно, если требуется, чтобы шаблон охватывал текст с начала и до конца. Обычно это требуется при валидации.
91+
92+
Например, мы хотим проверить, что в переменной num хранится именно десятичная дробь.
93+
94+
Ей соответствует регэксп \d+\.\d+. Но простой поиск найдёт дробь в любом тексте:
95+
96+
var num = "ля-ля 12.34";
97+
alert( num.match(/\d+\.\d+/ig) ); // 12.34
98+
Наша же задача – проверить, что num целиком соответствует паттерну \d+\.\d+.
99+
100+
Для этого обернём шаблон в якоря ^...$:
101+
102+
var num = "ля-ля 12.34";
103+
alert( num.match(/^\d+\.\d+$/ig) ); // null, не дробь
104+
105+
var num = "12.34";
106+
alert( num.match(/^\d+\.\d+$/ig) ); // 12.34, дробь!
107+
Теперь поиск ищет начало текста, за которым идёт число, затем точка, ещё число и конец текста. Это как раз то, что нужно.
108+
109+
Задачи
110+
Регэксп ^$
111+
Предложите строку, которая подойдёт под регулярное выражение ^$.
112+
113+
решение
114+
Проверьте MAC-адрес
115+
MAC-адрес сетевого интерфейса состоит из шести двузначных шестнадцатеричных чисел, разделённых двоеточием.
116+
117+
Например: '01:32:54:67:89:AB'.
118+
119+
Напишите регулярное выражение, которое по строке проверяет, является ли она корректным MAC-адресом.
120+
121+
Использование:
122+
123+
var re = ваш регэксп
124+
125+
alert( re.test('01:32:54:67:89:AB') ); // true
126+
127+
alert( re.test('0132546789AB') ); // false (нет двоеточий)
128+
129+
alert( re.test('01:32:54:67:89') ); // false (5 чисел, а не 6)
130+
131+
alert( re.test('01:32:54:67:89:ZZ') ) // false (ZZ в конце)
132+
решение
133+
--->

0 commit comments

Comments
 (0)