摘要:在本教程中,您将学习正则表达式中的字符类,以匹配一组字符,包括数字、空格和单词字符。
字符类的简介
字符类允许您匹配字符集中的任何符号。请注意,字符类也称为字符集。
假设您有一个这样的电话号码
+1-(408)-555-0105Code language: JavaScript (javascript)并且您想将其转换为纯数字
14085550105Code language: JavaScript (javascript)正则表达式中的字符类可以帮助您做到这一点。
让我们首先探索一下数字字符类。数字字符类用\d表示,它匹配任何单个数字
\dCode 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)输出
14085550105Code 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)输出
14085550105Code language: JavaScript (javascript)或者,您可以使用\D反向类和replace将所有非数字字符替换为空白,如下所示
let phone = '+1-(408)-555-0105';
let re = /\D/g;
console.log(phone.replace(re,''));Code language: JavaScript (javascript)输出
14085550105Code 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标志使点 (.) 字符类匹配任何字符,包括换行符。
本教程对您有帮助吗?