Skip to content

Commit b3799b4

Browse files
committed
feat: update translation
1 parent 55fcb33 commit b3799b4

File tree

1 file changed

+44
-33
lines changed
  • 9-regular-expressions/05-regexp-multiline-mode

1 file changed

+44
-33
lines changed
Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,87 @@
1-
# Flag "m" — 多行模式
1+
# 锚点 ^ $ 的多行模式,修饰符 "m"
22

3-
通过 flag `/.../m` 可以开启多行模式
3+
多行模式由修饰符 `pattern:m` 启用
44

5-
这仅仅会影响 `^``$` 锚符的行为
5+
它只影响 `pattern:^``pattern:$` 的行为
66

7-
在多行模式下,它们不仅仅匹配文本的开始与结束,还匹配每一行的开始与结束
7+
在多行模式下,它们不仅仅匹配文本的开始与末尾,还匹配每一行的开始与末尾
88

9-
## 行的开头 ^
9+
## 搜索行的开头 ^
1010

11-
在这个有多行文本的例子中,正则表达式 `/^\d+/gm` 将匹配每一行的开头数字
11+
在这个有多行文本的例子中,正则表达式 `/^\d+/gm` 将从每行的开头取一个数字
1212

1313
```js run
1414
let str = `1st place: Winnie
1515
2nd place: Piglet
16-
33rd place: Eeyore`;
16+
3rd place: Eeyore`;
1717

1818
*!*
19-
alert( str.match(/^\d+/gm) ); // 1, 2, 33
19+
console.log( str.match(/^\d/gm) ); // 1, 2, 3
2020
*/!*
2121
```
2222

23-
没有 flag `/.../m` 时,仅仅是第一个数字被匹配到:
24-
23+
没有修饰符 `pattern:m` 时,仅会匹配第一个数字:
2524

2625
```js run
2726
let str = `1st place: Winnie
2827
2nd place: Piglet
29-
33rd place: Eeyore`;
28+
3rd place: Eeyore`;
3029

3130
*!*
32-
alert( str.match(/^\d+/g) ); // 1
31+
console.log( str.match(/^\d/g) ); // 1
3332
*/!*
3433
```
3534

36-
这是因为默认情况下,锚符 `^` 仅仅匹配文本的开头,在多行模式下,它匹配行的开头。
35+
这是因为默认情况下,锚点 `^` 仅匹配文本的开头,在多行模式下,它匹配行的开头。
36+
37+
```smart
38+
“行的开头”表示“就在换行符之后”:多行模式下的测试 `pattern:^` 匹配所有以换行符 `\n` 开头的位置。
3739
38-
正则表达式引擎将会在文本中查找以锚符 `^` 开始的字符串,我们找到之后继续匹配 `\d+` 模式。
40+
并且在文本开始的位置。
41+
```
3942

40-
## 行的结尾 $
43+
## 搜索行的末尾 $
4144

42-
美元符 `$` 行为也相似
45+
美元符 `pattern:$` 的行为也类似
4346

44-
正则表达式 `\w+$ 会找到每一行的最后一个单词:
47+
正则表达式 `pattern:\d$` 寻找每行的最后一个数字
4548

4649
```js run
47-
let str = `1st place: Winnie
48-
2nd place: Piglet
49-
33rd place: Eeyore`;
50+
let str = `Winnie: 1
51+
Piglet: 2
52+
Eeyore: 3`;
5053

51-
alert( str.match(/\w+$/gim) ); // Winnie,Piglet,Eeyore
54+
console.log( str.match(/\d$/gm) ); // 1,2,3
5255
```
5356

54-
没有 `/.../m` flag 的话,美元符 `$` 将会仅仅匹配整个文本的结尾,所以只有最后的一个单词会被找到
57+
没有修饰符 `pattern:m`,那么美元符 `pattern:$` 将只会匹配整个文本的末尾,所以只有最后一个数字会被匹配
5558

56-
## 锚符 ^$ 对比 \n
59+
```smart
60+
“行的末尾”表示“就在换行符之前”:多行模式下的测试 `pattern:$` 匹配换行符 `\n` 后接的所有位置。
5761
58-
要寻找新的一行的话,我们不仅可以使用锚符 `^``$`,也可以使用换行符 `\n`
62+
并且在文本末尾的位置。
63+
```
5964

60-
它和锚符 `^``$` 的第一个不同点是它不像锚符那样,它会“消耗”掉 `\n` 并且将其(`\n`)加入到匹配结果中。
65+
## 搜索 \n 而不是 ^ $
6166

62-
举个例子,我们在下面的代码中用它来替代 `$`
67+
要寻找新的一行,我们不仅可以使用锚点 `pattern:^``pattern:$`,也可以使用换行符 `\n`
68+
69+
区别是什么?让我们看个例子。
70+
71+
在这里我们使用 `pattern:\d\n` 进行搜索,而不是使用 `pattern:\d$`
6372

6473
```js run
65-
let str = `1st place: Winnie
66-
2nd place: Piglet
67-
33rd place: Eeyore`;
74+
let str = `Winnie: 1
75+
Piglet: 2
76+
Eeyore: 3`;
6877

69-
alert( str.match(/\w+\n/gim) ); // Winnie\n,Piglet\n
78+
console.log( str.match(/\d\n/g) ); // 1\n,2\n
7079
```
7180

72-
这里,我们每次匹配到的时候都会被添加一个换行符。
81+
正如我们所看到的,这里找到了 2 个匹配项而不是 3 个。
82+
83+
这是因为在 `subject:3` 之后没有换行符(但是有文本末尾,所以它匹配 `pattern:$`)。
7384

74-
还有一个不同点——换行符 `\n` 不会匹配字符串结尾。这就是为什么在上面的例子中 `Eeyore` 没有匹配到
85+
另一个区别是,现在每个匹配项都包含一个换行符 `match:\n`。与锚点 `pattern:^` `pattern:$` 不同,锚点只测试条件(行的开始/末尾),而 `\n` 是一个字符,因此它成为了结果的一部分
7586

76-
所以,通常情况下使用锚符更棒,用它匹配出来的结果更加接近我们想要的结果
87+
因此,当我们需要结果中有换行符时,使用 `\n`。而锚点则用于在行的开头/末尾查找某些内容

0 commit comments

Comments
 (0)