Skip to content

Commit d934399

Browse files
committed
feat: update translation
1 parent 93c6ff2 commit d934399

File tree

1 file changed

+30
-26
lines changed
  • 9-regular-expressions/07-regexp-escaping

1 file changed

+30
-26
lines changed
Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,71 @@
1+
12
# 转义,特殊字符
2-
正如我们所看到的,一个反斜杠 `"\"` 是用来表示匹配字符类的。所以它是一个特殊字符。
33

4-
还存在其它的特殊字符,这些字符在正则表达式中有特殊的含义。它们可以被用来做更加强大的搜索
4+
正如我们所看到的,反斜杠 `pattern:\` 用于表示字符类,例如 `pattern:\d`。所以它是正则表达式中的一个特殊字符(就像在常规字符串中一样)
55

6-
这里是包含所有特殊字符的列表:`pattern:[ \ ^ $ . | ? * + ( )`
6+
还存在其它特殊字符,这些字符在正则表达式中有特殊的含义,例如 `pattern:[ ] { } ( ) \ ^ $ . | ? * +`。它们用于执行更强大的搜索
77

8-
现在并不需要尝试去记住它们 —— 当我们分别处理其中的每一个时,你自然而然就会记住它们
8+
现在并不需要尝试记住它们 —— 当我们分别学习它们的时候,你自然而然就会记住了
99

1010
## 转义
1111

12-
如果要把特殊字符作为常规字符来使用,只需要在它前面加个反斜杠
12+
假如我们想要找到一个点号 `.`
1313

14-
这种方式也被叫做“转义一个字符”
14+
要将特殊字符用作常规字符,请在其前面加上反斜杠:`pattern:\.`
1515

16-
比如说,我们需要找到一个点号 `pattern:'.'`。在一个正则表达式中一个点号意味着“除了换行符以外的任意字符”,所以如果我们想真正表示对“一个点号”查询的时候,可以在点号前加一个反斜杠
16+
这就是所谓的“转义字符”
1717

18+
例如:
1819
```js run
19-
alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1
20+
alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1(匹配了!)
21+
alert( "Chapter 511".match(/\d\.\d/) ); // null(寻找一个真正的点 \.)
2022
```
2123

22-
括号也是特殊字符,所以如果我们想要在正则中查找它们,我们应该使用 `pattern:\(`。下面的例子会查找一个字符串 `"g()"`
24+
括号也是特殊字符,所以如果我们想要查找它们,我们应该使用 `pattern:\(`。下面的例子会查找一个字符串 `"g()"`
2325

2426
```js run
2527
alert( "function g()".match(/g\(\)/) ); // "g()"
2628
```
2729

28-
如果我们想查找反斜杠 `\`我们就应该使用两个反斜杠来查找
30+
如果我们想查找反斜杠 `\`我们就应该使用两个反斜杠
2931

3032
```js run
3133
alert( "1\\2".match(/\\/) ); // '\'
3234
```
3335

3436
## 一个斜杠
3537

36-
斜杠符号 `'/'` 并不是一个特殊符号,但是它被用于在 Javascript 中开启和关闭正则匹配:`pattern:/...pattern.../`,所以我们也应该转义它。
38+
斜杠符号 `'/'` 并不是一个特殊字符,但是它被用于在 Javascript 中开启和关闭正则匹配:`pattern:/...pattern.../`,所以我们也应该转义它。
3739

38-
下面是查询斜杠 `'/'` 的表达式:
40+
下面是搜索斜杠 `'/'` 的表达式:
3941

4042
```js run
4143
alert( "/".match(/\//) ); // '/'
4244
```
4345

44-
从另一个方面看,如果使用另一种 `new RegExp` 方式就不需要转义斜杠
46+
从另一个方面看,如果我们没使用 `pattern:/.../`,而是使用另一种 `new RegExp` 的方式创建正则表达式,则不需要转义斜杠
4547

4648
```js run
47-
alert( "/".match(new RegExp("/")) ); // '/'
49+
alert( "/".match(new RegExp("/")) ); // 找到了 /
4850
```
4951

50-
## 使用 new RegExp 创建正则实例
52+
## new RegExp
5153

52-
如果我们使用 `new RegExp` 来创建一个正则表达式实例,那么我们需要对其做一些额外的转义
54+
如果我们使用 `new RegExp` 创建正则表达式,那么我们不必转义 `/`,但需要进行一些其他转义
5355

54-
比如说,考虑下面的示例
56+
例如,考虑下面这个示例
5557

5658
```js run
5759
let reg = new RegExp("\d\.\d");
5860

5961
alert( "Chapter 5.1".match(reg) ); // null
6062
```
6163

62-
它并没有正常发挥作用,但是为什么呢?
64+
在之前的示例中我们使用 `pattern:/\d\.\d/` 进行类似的搜索没问题,但 `new RegExp("\d\.\d")` 不起作用,为什么?
65+
66+
因为反斜杠被字符串“消耗”了。我们可能还记得,常规字符串有自己的特殊字符,例如 `\n`,反斜杠用于转义。
6367

64-
原因就在于字符串转义规则。看下面的例子
68+
下面是 "\d\.\d" 的感知形式
6569

6670
```js run
6771
alert("\d\.\d"); // d.d
@@ -70,18 +74,18 @@ alert("\d\.\d"); // d.d
7074
在字符串中的反斜杠表示转义或者类似 `\n` 这种只能在字符串中使用的特殊字符。这个引用会“消费”并且解释这些字符,比如说:
7175

7276
- `\n` —— 变成一个换行字符,
73-
- `\u1234` —— 变成包含该码位的 Unicode 字符,
74-
- 。。。其它有些并没有特殊的含义,就像 `\d` 或者 `\z`碰到这种情况的话会把反斜杠移除
77+
- `\u1234` —— 变成该编码所对应的 Unicode 字符,
78+
- ……而当没有特殊含义时:如 `pattern:\d` 或者 `pattern:\z`碰到这种情况时则会把自动移除反斜杠
7579

76-
所以调用 `new RegExp` 会获得一个没有反斜杠的字符串。
80+
所以调用 `new RegExp` 会获得一个没有反斜杠的字符串。这就是搜索不起作用的原因!
7781

7882
如果要修复这个问题,我们需要双斜杠,因为引用会把 `\\` 变为 `\`
7983

8084
```js run
8185
*!*
8286
let regStr = "\\d\\.\\d";
8387
*/!*
84-
alert(regStr); // \d\.\d (correct now)
88+
alert(regStr); // \d\.\d(现在对了)
8589

8690
let regexp = new RegExp(regStr);
8791

@@ -90,6 +94,6 @@ alert( "Chapter 5.1".match(regexp) ); // 5.1
9094

9195
## Summary
9296

93-
- 要在字面(意义)上搜索特殊字符 `pattern:[ \ ^ $ . | ? * + ( )`我们需要在它们前面加上反斜杠 `\`"转义它们")。
94-
- 如果我们在 `pattern:/.../` 内部(但不在 `new RegExp` 内部),还需要转义 `/`
95-
- 传递一个字符串(参数)给 `new RegExp` 时,我们需要双倍反斜杠 `\\`因为字符串引号会消费其中的一个
97+
- 要在字面意义上搜索特殊字符 `pattern:[ \ ^ $ . | ? * + ( )`我们需要在它们前面加上一个反斜杠 `\`转义它们)。
98+
- 如果在 `pattern:/.../` (但不在 `new RegExp` 内),我们还需要转义 `/`
99+
- 当将字符串传递给给 `new RegExp` 时,我们需要双反斜杠 `\\`因为字符串引号会消费一个反斜杠

0 commit comments

Comments
 (0)