10-具名字符集
17.9 具名字符集
有一些字符集很常见而且实用,人们为这些字符集创建了一些方便的缩写,如表17-1所示。
| 具名字符集 | 等 价 物 | 注 释 | | :----- | :----- | :----- | :----- | :----- | | \d | [0-9] | | \D | [^0-9] | | \s | [ \t\v\n \r] | 包含制表符、空格和垂直制表符 | | \S | [^ \t\v\n \r] | | \w | [a-zA-Z] | 注意,破折号和句号没有被包含进来,所以它不能用于域名和CSS类 | | \W | [^a-zA-Z] |
上表中最常用的缩写可能是空格集( \s )。例如,空格通常用于行对齐,但如果想写一段代码来解析它,那么可能希望能够兼顾不同数量的空格:
const stuff =
'hight: 9\n' +
'medium: 5\n' +
'low: 2\n';
const levels = stuff.match(/:\s*[0-9]/g);
(\s后面的*表示"零个或多个",很快会学到这点)。
千万不要忽视反字符集的用途( \D , \S 和 \W ),它们用了一种很好的方式来帮助大家摆脱那些不想要的东西。例如,在将电话号码存到数据库之前对其进行标准化,就是一个很不错的想法。因为人们可能会用各种奇怪的方式输入电话号码:破折号、句号、括号和空白。如果只有10个数字,那么对它搜索、监控和识别不就方便多了吗?(或者超出10位的国际电话)。使用\D后事情就简单了:
const messyPhone = '(505) 555-1515';
const neatPhone = messyPhone.replace(/\D/g, '');
同样地,经常使用 \S 来确保必填字段中有数据(它们必须至少包含一个非空格的字符)
const field = ' something ';
const valid = /\S/.test(field);