正则表达式:字符类

摘要:在本教程中,您将学习正则表达式中的字符类,以匹配一组字符,包括数字、空格和单词字符。

字符类的简介

字符类允许您匹配字符集中的任何符号。请注意,字符类也称为字符集。

假设您有一个这样的电话号码

+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)。
  • \ww代表单词字符。它匹配 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标志使点 (.) 字符类匹配任何字符,包括换行符。
本教程对您有帮助吗?