字符类
字符类区分不同种类的字符,例如,区分字母和数字。
试一试
const chessStory = "He played the King in a8 and she moved her Queen in c2.";
const regexpCoordinates = /\w\d/g;
console.log(chessStory.match(regexpCoordinates));
// Expected output: Array [ 'a8', 'c2']
const moods = "happy 🙂, confused 😕, sad 😢";
const regexpEmoticons = /[\u{1F600}-\u{1F64F}]/gu;
console.log(moods.match(regexpEmoticons));
// Expected output: Array ['🙂', '😕', '😢']
类型
| 字符 | 含义 |
|---|---|
[xyz]
|
字符类:匹配其中包含的任何一个字符。你可以使用连字符指定一个字符范围,但如果连字符出现在方括号中包含的第一个或最后一个字符,它将被视为一个字面连字符,作为普通字符包含在字符类中。 例如, 例如, 例如, 当 |
|
|
否定字符类:匹配方括号中未包含的任何字符。你可以使用连字符指定一个字符范围,但如果连字符出现在
注意: |
. |
通配符:匹配除行终止符( |
\d |
数字字符类转义:匹配任何数字(阿拉伯数字)。等同于 |
\D |
非数字字符类转义:匹配任何非数字(阿拉伯数字)字符。等同于 |
\w |
单词字符类转义:匹配基本拉丁字母中的任何字母数字字符,包括下划线。等同于 |
\W |
非单词字符类转义:匹配基本拉丁字母中非单词字符的任何字符。等同于 |
\s |
空白字符类转义:匹配单个空白字符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。等同于 |
\S |
非空白字符类转义:匹配除空白字符之外的单个字符。等同于 |
\t |
匹配水平制表符。 |
\r |
匹配回车符。 |
\n |
匹配换行符。 |
\v |
匹配垂直制表符。 |
\f |
匹配换页符。 |
[\b] |
匹配退格符。如果你正在寻找单词边界断言 (\b),请参阅断言。 |
\0 |
匹配一个 NUL 字符。其后不能跟其他数字。 |
\cX
|
使用脱字号表示法匹配控制字符,其中 "X" 是 A-Z 的字母(对应代码点 |
\xhh
|
匹配代码为 hh(两个十六进制数字)的字符。 |
\uhhhh
|
匹配值为 hhhh(四个十六进制数字)的 UTF-16 代码单元。 |
\u{hhhh} 或 \u{hhhhh}
|
(仅当设置了 u 标志时。)匹配 Unicode 值为 U+hhhh 或 U+hhhhh(十六进制数字)的字符。 |
\p{UnicodeProperty}, \P{UnicodeProperty} |
Unicode 字符类转义:根据其 Unicode 字符属性匹配字符(例如,表情符号字符、日语片假名字符或中文/日语汉字字符等)。 |
\ |
表示后面的字符应被特殊处理,或“转义”。它有两种行为方式。
注意:要字面匹配此字符,请用其自身转义。换句话说,要搜索 |
x|y
|
或(选择):匹配 "x" 或 "y"。每个由竖线 (
注意:“或”是指定“一组选择”的另一种方式,但它不是字符类。“或”不是原子 — 你需要使用一个组才能将其作为更大模式的一部分。 |
示例
查找一系列数字
在这个例子中,我们用 \d{4} 匹配一个由 4 个数字组成的序列。\b 表示一个单词边界(即,不要在数字序列的中间开始或结束匹配)。
const randomData = "015 354 8787 687351 3512 8735";
const regexpFourDigits = /\b\d{4}\b/g;
console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']
在字符类转义参考中查看更多示例。
查找以 A 开头(拉丁字母)的单词
在这个例子中,我们匹配一个以字母 A 开头的单词。\b 表示一个单词边界(即,不要在单词中间开始匹配)。[aA] 表示字母 "a" 或 "A"。\w+ 表示拉丁字母表中的任何字符,多次出现(+ 是一个量词)。请注意,由于我们已经匹配到不再有单词字符为止,因此不需要结尾的 \b 边界。
const aliceExcerpt =
"I'm sure I'm not Ada,' she said, 'for her hair goes in such long ringlets, and mine doesn't go in ringlets at all.";
const regexpWordStartingWithA = /\b[aA]\w+/g;
console.table(aliceExcerpt.match(regexpWordStartingWithA));
// ['Ada', 'and', 'at', 'all']
在字符类转义参考中查看更多示例。
查找单词(来自 Unicode 字符)
我们可以使用一系列 Unicode 字符而不是拉丁字母表来识别单词(从而能够处理俄语或阿拉伯语等其他语言的文本)。Unicode 的“基本多语言平面”包含世界上使用的大多数字符,我们可以使用字符类和范围来匹配用这些字符编写的单词。
const nonEnglishText = "Приключения Алисы в Стране чудес";
const regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
// BMP goes through U+0000 to U+FFFF but space is U+0020
console.table(nonEnglishText.match(regexpBMPWord));
["Приключения", "Алисы", "в", "Стране", "чудес"];
在Unicode 字符类转义参考中查看更多示例。
计算元音
在这个例子中,我们计算文本中的元音(A、E、I、O、U、Y)数量。g 标志用于匹配文本中所有出现的模式。i 标志用于使模式不区分大小写,因此它匹配大写和小写元音。
const aliceExcerpt =
"There was a long silence after this, and Alice could only hear whispers now and then.";
const regexpVowels = /[aeiouy]/gi;
console.log("Number of vowels:", aliceExcerpt.match(regexpVowels).length);
// Number of vowels: 26