You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 9-regular-expressions/04-regexp-escaping/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,11 +1,11 @@
1
1
2
-
# Экранирование специальных символов
2
+
# Экранирование, специальные символы
3
3
4
4
Как мы уже видели, обратная косая черта `"\"` используется для обозначения классов символов. Это специальный символ в регулярных выражениях (как и в обычных строках).
5
5
6
6
Есть и другие специальные символы, которые имеют особое значение в регулярном выражении. Они используются для более сложных поисковых конструкций. Вот полный перечень этих символов: `pattern:[ \ ^ $ . | ? * + ( )`.
7
7
8
-
Не надо пытаться запомнить этот список -- скоро мы разберемся с каждым из них по отдельности, и таким образом вы выучите их наизусть.
8
+
Не надо пытаться запомнить этот список -- скоро мы разберемся с каждым из них по отдельности, и таким образом вы выучите их "автоматически".
С другой стороны, если мы не используем короткую запись `/.../`, а создаем регулярное выражение, используя `new RegExp`, тогда нам не нужно экранировать его:
46
+
С другой стороны, если мы не используем короткую запись `/.../`, а создаем регулярное выражение, используя `new RegExp`, тогда нам не нужно экранировать косую черту:
47
47
48
48
```js run
49
49
alert( "/".match(newRegExp("/")) ); // '/'
50
50
```
51
51
52
52
## new RegExp
53
53
54
-
Если мы создаем регулярное выражение с помощью `new RegExp`, то нам не нужно учитывать `/`, но нужно соблюдать другие экранирования.
54
+
Если мы создаем регулярное выражение с помощью `new RegExp`, то нам не нужно учитывать `/`, но нужно дополнительное экранирование.
55
55
56
-
Например, рассмотрим это:
56
+
Рассмотрим такой пример:
57
57
58
58
```js run
59
59
let reg =newRegExp("\d\.\d");
60
60
61
61
alert( "Глава 5.1".match(reg) ); // null
62
62
```
63
63
64
-
Это работает с `pattern:/\d\.\d/`, но не работает с `new RegExp("\d\.\d")`, почему?
64
+
Поиск работает с `pattern:/\d\.\d/`, но не работает с `new RegExp("\d\.\d")`, почему?
65
65
66
-
Причина в том, что обратные косые "воспринимаются" как строка. Помните, что обычные строки имеют свои специальные символы, такие как `\n`, и для экранирования используется обратная косая черта.
66
+
Причина в том, что символы обратной косой черты "съедаются" строкой. Как вы помните, что обычные строки имеют свои специальные символы, такие как `\n`, и для экранирования используется обратная косая черта.
67
67
68
-
Пожалуйста, посмотрите, что на самом деле означает "\d\.\d":
68
+
Вот как воспринимается строка "\d\.\d":
69
69
70
70
```js run
71
71
alert("\d\.\d"); // d.d
72
72
```
73
73
74
-
Кавычки "употребляют" обратные косые и интерпретируют их по своему усмотрению, например:
74
+
Кавычки "съедают" символы обратной косой черты для себя, например:
75
75
76
76
-`\n` -- становится символом перевода строки,
77
77
-`\u1234` -- становится символом Юникода с указанным номером,
78
78
- ...А когда нет особого значения: как например для `\d` или`\z`, обратная косая черта просто удаляется.
79
79
80
-
Таким образом, вызов `new RegExp` получает строку без обратной косой черты. Вот почему это не работает!
80
+
Таким образом, вызов `new RegExp` получает строку без обратной косой черты. Вот почему поиск не работает!
81
81
82
82
Чтобы исправить это, нам нужно удвоить обратную косую черту, потому что кавычки превращают `\\` в `\`:
0 commit comments