11# 字符类
22
3- 考虑一个实际的任务 - 我们有一个电话号码,例如 ` "+7(903)-123-45-67" ` ,我们需要将其转换为纯数字:` 79031234567 ` 。
3+ 考虑一个实际的任务 —— 我们有一个电话号码,例如 ` "+7(903)-123-45-67" ` ,我们需要将其转换为纯数字:` 79031234567 ` 。
44
5- 为此,我们可以查找并删除所有非数字的内容。字符类可以帮助解决这个问题 。
5+ 为此,我们可以查找并删除所有非数字的内容。字符类可以帮助我们实现它 。
66
7- ** 字符类(Character classes)** 是一个特殊的符号,匹配特定集中的任何符号 。
7+ ** 字符类(Character classes)** 是一种特殊的符号,匹配特定集合中的任何符号 。
88
9- 首先,让我们探索“数字”类。它写为 ` pattern:\d ` ,对应于“任何一个数字 ”。
9+ 首先,让我们探索“数字”类。它写为 ` pattern:\d ` ,对应于“任何一位数字 ”。
1010
1111例如,让我们找到电话号码的第一个数字:
1212
@@ -18,18 +18,18 @@ let regexp = /\d/;
1818alert ( str .match (regexp) ); // 7
1919```
2020
21- 如果没有标志 ` pattern:g ` ,则正则表达式仅查找第一个匹配项,即第一个数字 ` pattern:\d ` 。
21+ 如果没有修饰符 ` pattern:g ` ,则正则表达式仅查找第一个匹配项,即第一个数字 ` pattern:\d ` 。
2222
23- 让我们添加 ` pattern:g ` 标志来查找所有数字 :
23+ 让我们添加修饰符 ` pattern:g ` 来查找所有数字 :
2424
2525``` js run
2626let str = " +7(903)-123-45-67" ;
2727
2828let regexp = / \d / g ;
2929
30- alert ( str .match (regexp) ); // array of matches: 7,9,0,3,1,2,3,4,5,6,7
30+ alert ( str .match (regexp) ); // 匹配项构成的数组: 7,9,0,3,1,2,3,4,5,6,7
3131
32- // let's make the digits-only phone number of them:
32+ // 让我们将其输出为纯数字构成的电话号码:
3333alert ( str .match (regexp).join (' ' ) ); // 79031234567
3434```
3535
@@ -41,16 +41,16 @@ alert( str.match(regexp).join('') ); // 79031234567
4141: 数字:从 ` 0 ` 到 ` 9 ` 的字符。
4242
4343` pattern:\s ` ("s" 来自 "space")
44- : 空格符号:包括空格,制表符 ` \t ` ,换行符 ` \n ` 和其他少数稀有字符,例如 ` \v ` , ` \f ` 和 ` \r ` 。
44+ : 空格符号:包括空格,制表符 ` \t ` ,换行符 ` \n ` 和其他少数稀有字符,例如 ` \v ` 、 ` \f ` 和 ` \r ` 。
4545
4646` pattern:\w ` ("w" 来自 "word")
4747: “单字”字符:拉丁字母或数字或下划线 ` _ ` 。非拉丁字母(如西里尔字母或印地文)不属于 ` pattern:\w ` 。
4848
49- 例如,` pattern:\d\s\w ` 表示“数字”,后跟“空格字符”,后跟“单字字符”,例如 ` match:1 a ` 。
49+ 例如,` pattern:\d\s\w ` 表示“数字”,后跟“空格字符”,后跟“单字字符”,例如 ` match:1 a ` 。
5050
5151** 正则表达式可能同时包含常规符号和字符类。**
5252
53- 例如,` pattern:CSS\d ` 匹配字符串 ` match:CSS ` 与后面的数字 :
53+ 例如,` pattern:CSS\d ` 匹配 ` match:CSS ` 后面带有一个数字的字符串 :
5454
5555``` js run
5656let str = " Is there CSS4?" ;
@@ -59,7 +59,7 @@ let regexp = /CSS\d/
5959alert ( str .match (regexp) ); // CSS4
6060```
6161
62- 我们还可以使用许多字符类 :
62+ 我们还可以使用更多字符类 :
6363
6464``` js run
6565alert ( " I love HTML5!" .match (/ \s\w\w\w\w\d / ) ); // ' HTML5'
@@ -71,7 +71,7 @@ alert( "I love HTML5!".match(/\s\w\w\w\w\d/) ); // ' HTML5'
7171
7272## 反向类
7373
74- 对于每个字符类,都有一个“反向类”,用相同的字母表示,但要以大写书写形式 。
74+ 对于每个字符类,都有一个“反向类”,用相同的字母表示,但是大写的 。
7575
7676“反向”表示它与所有其他字符匹配,例如:
7777
@@ -84,25 +84,25 @@ alert( "I love HTML5!".match(/\s\w\w\w\w\d/) ); // ' HTML5'
8484` pattern:\W `
8585: 非单字字符:除 ` pattern:\w ` 以外的任何字符,例如非拉丁字母或空格。
8686
87- 在这一章的开头 ,我们看到了如何从 ` subject:+7(903)-123-45-67 ` 这样的字符串中创建一个只包含数字的电话号码: 找到所有的数字并将它们连接起来。
87+ 在本章的开头 ,我们看到了如何从 ` subject:+7(903)-123-45-67 ` 这样的字符串中创建一个只包含数字的电话号码: 找到所有的数字并将它们连接起来。
8888
8989``` js run
9090let str = " +7(903)-123-45-67" ;
9191
9292alert ( str .match (/ \d / g ).join (' ' ) ); // 79031234567
9393```
9494
95- 另一种快捷的替代方法是查找非数字 ` pattern:\D ` 并将其从字符串中删除:
95+ 另一种快捷的替代方式是查找非数字 ` pattern:\D ` 并将其从字符串中删除:
9696
9797``` js run
9898let str = " +7(903)-123-45-67" ;
9999
100100alert ( str .replace (/ \D / g , " " ) ); // 79031234567
101101```
102102
103- ## 点(.)是匹配 “任何字符”
103+ ## 点(.)匹配 “任何字符”
104104
105- 点 ` pattern:. ` 是一种特殊字符类,它与 “除换行符之外的任何字符” 匹配。
105+ 点 ` pattern:. ` 是一种特殊字符类,它与“除换行符之外的任何字符”匹配。
106106
107107例如:
108108
@@ -117,45 +117,45 @@ let regexp = /CS.4/;
117117
118118alert ( " CSS4" .match (regexp) ); // CSS4
119119alert ( " CS-4" .match (regexp) ); // CS-4
120- alert ( " CS 4" .match (regexp) ); // CS 4 (space is also a character)
120+ alert ( " CS 4" .match (regexp) ); // CS 4(空格也是一个字符)
121121```
122122
123123请注意,点表示“任何字符”,而不是“缺少字符”。必须有一个与之匹配的字符:
124124
125125``` js run
126- alert ( " CS4" .match (/ CS. 4/ ) ); // null, no match because there's no character for the dot
126+ alert ( " CS4" .match (/ CS. 4/ ) ); // null,没有匹配项,因为这里没有与点匹配的字符
127127```
128128
129- ### 带有“s”标志时点字符类严格匹配任何字符
129+ ### 带有修饰符 "s" 时点字符类匹配任何字符
130130
131131默认情况下,点与换行符 ` \n ` 不匹配。
132132
133133例如,正则表达式 ` pattern:A.B ` 匹配 ` match:A ` ,然后匹配 ` match:B ` 和它们之间的任何字符,除了换行符` \n ` :
134134
135135``` js run
136- alert ( " A\n B" .match (/ A. B/ ) ); // null (no match)
136+ alert ( " A\n B" .match (/ A. B/ ) ); // null(无匹配项)
137137```
138138
139- 在许多情况下,当我们希望用点来表示 “任何字符”( 包括换行符)时 。
139+ 在很多情况下,我们希望点能够匹配 “任何字符”, 包括换行符。
140140
141- 这就是标志 ` pattern:s ` 所做的。如果有一个正则表达式,则点 ` pattern:. ` 实际上匹配任何字符 :
141+ 这就是修饰符 ` pattern:s ` 所做的事。如果有一个正则表达式具有该修饰符,那么点 ` pattern:. ` 能够匹配任何字符 :
142142
143143``` js run
144- alert ( " A\n B" .match (/ A. B/ s ) ); // A\nB (match!)
144+ alert ( " A\n B" .match (/ A. B/ s ) ); // A\nB(匹配了!)
145145```
146146
147- ```` warn header="不支持 Firefox、IE、Edge "
148- 使用前可从 <https://caniuse.com/#search=dotall> 确认以获得最新的支持状态。在撰写本文时,它不包括 Firefox、IE、Edge 。
147+ ```` warn header="IE 浏览器不支持 "
148+ IE 浏览器不支持 `pattern:s` 修饰符 。
149149
150- 幸运的是,有一种替代方法可以在任何地方使用。我们可以使用诸如 `pattern:[\s\S]` 之类的正则表达式来匹配 “任何字符”。
150+ 幸运的是,有一个替代方案,我们可以使用像 `pattern:[\s\S]` 这样的正则表达式来匹配 “任何字符”(此模式将在 <info:regexp-character-sets-and-ranges> 中介绍) 。
151151
152152```js run
153- alert( "A\nB".match(/A[\s\S]B/) ); // A\nB (match!)
153+ alert( "A\nB".match(/A[\s\S]B/) ); // A\nB(匹配了!)
154154```
155155
156- 模式 `pattern:[\s\S]` 从字面上说 :“空格字符或非空格字符”。换句话说,“任何东西 ”。我们可以使用另一对互补的类,例如 `pattern:[\d\D]`。甚至是 `pattern:[^]` —— 意思是匹配任何字符,除了什么都没有。
156+ 模式 `pattern:[\s\S]` 从字面上意思是 :“空格字符或非空格字符”。换句话说,“任何字符 ”。我们可以使用另一对互补的类,例如 `pattern:[\d\D]`。甚至是 `pattern:[^]` —— 意思是匹配任何字符,除了什么都没有。
157157
158- 如果我们希望两种“点”都使用相同的模式,也可以使用此技巧:实际的点 `pattern:.` 具有常规方式 (“不包括换行符”)以及一种使用 `pattern:[\s\S]` 或类似形式匹配“任何字符”。
158+ 如果我们希望两种“点”都使用相同的模式,也可以使用此技巧:实际的点 `pattern:.` 表现常规方式 (“不包括换行符”),以及带有 `pattern:[\s\S]` 或类似形式匹配“任何字符”。
159159````
160160
161161```` warn header="注意空格"
@@ -166,20 +166,20 @@ alert( "A\nB".match(/A[\s\S]B/) ); // A\nB (match!)
166166让我们尝试查找由连字符(-)分隔的数字:
167167
168168```js run
169- alert( "1 - 5".match(/\d-\d/) ); // null, no match!
169+ alert( "1 - 5".match(/\d-\d/) ); // null,没有匹配项!
170170```
171171
172- 让我们修复一下,在正则表达式中添加空格:\ d-\ d`:
172+ 让我们修复一下,在正则表达式中添加空格 `pattern:\d - \ d`:
173173
174174```js run
175- alert( "1 - 5".match(/\d - \d/) ); // 1 - 5, now it works
176- // or we can use \s class:
177- alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5, also works
175+ alert( "1 - 5".match(/\d - \d/) ); // 1 - 5,现在可以了
176+ // 或者我们可以使用 \s 类:
177+ alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5,也可以
178178```
179179
180- **空格是一个字符 。与其他字符同等重要。**
180+ **一个空格是一个字符 。与其他字符同等重要。**
181181
182- 我们无法在正则表达式中添加或删除空格,并且期望能正常工作 。
182+ 我们无法在正则表达式中添加或删除空格后,还期望它的作用能像之前那样不被改变 。
183183
184184换句话说,在正则表达式中,所有字符都很重要,空格也很重要。
185185````
@@ -194,10 +194,10 @@ alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5, also works
194194- ` pattern:\S ` —— 除了 ` pattern:\s ` 。
195195- ` pattern:\w ` —— 拉丁字母,数字,下划线 ` '_' ` 。
196196- ` pattern:\W ` —— 除了 ` pattern:\w ` 。
197- - ` pattern:. ` —— 任何带有 ` 's' ` 标志的字符,否则为除换行符 ` \n ` 之外的任何字符。
197+ - ` pattern:. ` —— 带有修饰符 ` 's' ` 时匹配任何字符,否则匹配除换行符 ` \n ` 之外的任何字符。
198198
199199……但这还不是全部!
200200
201- JavaScript 用于字符串的 Unicode 编码提供了许多字符属性 ,例如:这个字母属于哪一种语言 (如果它是一个字母)? 它是标点符号吗? 等等。
201+ JavaScript 用于字符串的 Unicode 编码提供了很多字符属性 ,例如:这个字母属于哪种语言 (如果它是一个字母), 它是标点符号吗, 等等。
202202
203- 我们也可以通过这些属性进行搜索。这需要标志 ` pattern:u ` ,在下一篇文章中介绍 。
203+ 我们也可以通过这些属性进行搜索。这需要修饰符 ` pattern:u ` ,我们将在下一篇文章中介绍 。
0 commit comments