摘要:在本教程中,您将学习正则表达式中的字符类,以匹配一组字符,包括数字、空格和单词字符。
字符类的简介
字符类允许您匹配字符集中的任何符号。请注意,字符类也称为字符集。
假设您有一个这样的电话号码
+1-(408)-555-0105
Code language: JavaScript (javascript)
并且您想将其转换为纯数字
14085550105
Code language: JavaScript (javascript)
正则表达式中的字符类可以帮助您做到这一点。
让我们首先探索一下数字字符类。数字字符类用\d
表示,它匹配任何单个数字
\d
Code language: JavaScript (javascript)
以下示例使用\d
来匹配电话号码中的第一个数字
let phone = '+1-(408)-555-0105';
let re = /\d/;
console.log(phone.match(re));
Code language: JavaScript (javascript)
输出
['1', index: 1, input: '+1-(408)-555-0105', groups: undefined]
Code language: JavaScript (javascript)
当您添加全局标志(g
)时,正则表达式将搜索所有数字,而不是第一个数字
let phone = '+1-(408)-555-0105';
let re = /\d/g;
console.log(phone.match(re));
Code language: JavaScript (javascript)
输出
["1", "4", "0", "8", "5", "5", "5", "0", "1", "0", "5"]
Code language: JavaScript (javascript)
现在,您可以将电话号码转换为纯数字,如下所示
- 使用
match()
方法返回包含数字的数组。 - 使用
join()
方法将数组的元素连接成一个字符串。
例如
let phone = '+1-(408)-555-0105';
let re = /\d/g;
let numbers = phone.match(re);
let phoneNo = numbers.join('');
console.log(phoneNo);
Code language: JavaScript (javascript)
输出
14085550105
Code language: JavaScript (javascript)
为了使其更简洁,您可以像这样链接match()
和join()
方法
console.log('+1-(408)-555-0105'.match(/\d/g).join(''));
Code language: JavaScript (javascript)
除了数字字符类(\d
)之外,正则表达式还支持其他字符类。
最常用的字符类是
\d
– 匹配单个数字或 0 到 9 之间的字符。\s
– 匹配单个空格符号,例如空格、制表符(\t
)、换行符(\n
)。\w
–w
代表单词字符。它匹配 ASCII 字符[A-Za-z0-9_]
,包括拉丁字母、数字和下划线(_
)
在实践中,您经常会将字符类组合起来形成更强大的匹配。
例如,\w\d
匹配任何单词后跟一个数字,例如O2
let str = 'O2 is oxygen';
let re = /\w\d/g
console.log(str.match(re));
Code language: JavaScript (javascript)
输出
['O2']
Code language: JavaScript (javascript)
模式可以包含常规字符和字符类。例如,ES\d
正则表达式匹配ES
后跟一个数字,例如ES6
let str = 'ES6 Tutorial';
let re = /ES\d/g
console.log(str.match(re));
Code language: JavaScript (javascript)
输出
['ES6']
Code language: JavaScript (javascript)
反向类
字符类有一个反向类,它与相同的字母相同,但使用大写字母,例如,\D
是\d
的反向。
反向类匹配所有其他字符。例如,\D
匹配任何字符,除了数字(或\d
)。以下是反向类
\D
– 匹配除数字外的任何字符,例如字母。\S
– 匹配除空格外的任何字符,例如字母\W
– 匹配除单词字符外的任何字符,例如非拉丁字母或空格。
回到电话号码的示例,您可以使用带有全局标志 (g
) 的\d
let phone = '+1-(408)-555-0105';
let re = /\d/g;
console.log(phone.match(re).join(''));
Code language: JavaScript (javascript)
输出
14085550105
Code language: JavaScript (javascript)
或者,您可以使用\D
反向类和replace
将所有非数字字符替换为空白,如下所示
let phone = '+1-(408)-555-0105';
let re = /\D/g;
console.log(phone.replace(re,''));
Code language: JavaScript (javascript)
输出
14085550105
Code language: JavaScript (javascript)
点 (.) 字符类
点 (.
) 是一个特殊的字符类,它匹配除换行符外的任何字符
let re = /E.6/
console.log('ES6'.match(re));
Code language: JavaScript (javascript)
输出
['ES6', index: 0, input: 'ES6', groups: undefined]
Code language: JavaScript (javascript)
但是,以下示例返回null
let re = /ES.6/
console.log('ES\n6'.match(re));
Code language: JavaScript (javascript)
如果您想使用点 (.
) 字符类来匹配任何字符,包括换行符,您可以使用s
标志
let re = /ES.6/s
console.log('ES\n6'.match(re));
Code language: JavaScript (javascript)
输出
['ES\n6', index: 0, input: 'ES\n6', groups: undefined]
Code language: JSON / JSON with Comments (json)
总结
- 字符类匹配某些字符集中的任何符号,例如
\d
、\s
和\w
。 - 字符类
\d
、\s
和\w
具有反向类\D
、\S
和\W
,它们匹配除\d
、\s
和\w
之外的其他字符。 - 点 (
.
) 匹配除换行符外的任何字符。使用s
标志使点 (.
) 字符类匹配任何字符,包括换行符。
本教程对您有帮助吗?