09-字符集
17.8 字符集
字符集提供了一种简洁的方式,来表示单个字符的分支(稍后会把它与“重复”结合使用,看看它是如何扩展到多字符的)。这样说吧,如果想在一个字符串中查找所有的数字。可以使用分支:
const beer99 = "99 bottles of beer on the wall " +
"take 1 down and pass it around -- " +
"98 bottles of beer on the wall.";
const matches = beer99.match(/0|1|2|3|4|5|6|7|8|9/g);
太冗长了!如果想匹配字母而非数字或数字和字母,或是任何非数字的内容,又该如何呢?此时字符集就派上用场了。简单来说,它们提供了一个更加简洁的方式来表示单个数字的分支。开发人员甚至还能指定范围。来改写之前的例子:
const m1 = beer99.match(/[0123456789]/g); // 可以
const m2 = beer99.match(/[0-9]/g); // 更好!
开发人员还可以组合范围。来看看如何匹配字母、数字和各种标点符号(这个表达式会匹配原始字符串中除了空格之外的所有字符):
const match = beer99.match(/[\-0-9a-z.]/ig);
注意,查找时没有先后顺序,也可以写成 /[.a-z0-9\-]/ 。查找时必须对破折号进行转义,否则,JavaScript会尝试将它翻译成查找范围的一部分(也可以将它放在右方括号之前,那样就不用转义了)
字符集的另一个非常强大的特性是能够取反。对字符集取反是指:“匹配这些字符之外的所有内容”。要对一个字符集取反,将插入符号(^)作为字符集的第一个字符即可。
const match = beer99.match(/[^\-0-9a-z.]/);
这个正则表达式只会匹配原始字符串中的空格(而如果真的想只匹配空格,还有更好的方式,很快就会学到它)。