04. 使用元字符(学习笔记)

4. 正则表达式必知必会-使用元字符

4.1 对特殊字符进行转义

. 表示匹配任意一个单字字符。
[] 表示匹配字符集

const str = 'const arr = []; if (arr[0] === 0) {}';
const reg = /arr[0]/g; // <-- 想匹配 arr[0] 这个内容,但是 [0] 表示包含 0 的字符集,只能匹配 arr0
let match;
while ((match = reg.exec(str))) { // <-- 匹配不到
  console.log(match);
}

加上反斜杠可以将元字符转义。

const str = 'const arr = []; if (arr[0] === 0) {}';
const reg = /arr\[0\]/g; // <-- 将 [] 进行转义
let match;
while ((match = reg.exec(str))) {
  console.log(match);
}
// ["arr[0]", index: 20, input: "const arr = []; if (arr[0] === 0) {}", groups: undefined]

\ 也是一个元字符,使用它本身时,也需要转义:\。

在一个完整的正则表达式里,\ 后面永远跟着一个字符,否则会报错。

4.2 匹配空白字符

元字符 说明
[\b] 回退并删除一个字符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
const str = '01 test01 \n\r' + '02 test02 \n\r' + '03 test03';
console.log(str);
/*01 test01 ↵
 *02 test02 ↵
 *03 test03
*/
const reg = /\n\r/g;
console.log(str.replace(reg, '')); // 01 test01 02 test02 03 test03

4.3 匹配特定的字符类型

4.3.1 匹配数字(与非数字)

元字符 说明
\d 匹配任何一个数字字符,等价于 [0-9]
\D 匹配任何一个非数字字符,等价于 [^0-9]
const str = 'const arr = [];\nconsole.log(arr[0], arr[1], arr[2]);';
const reg = /arr\[\d\]/g;
let match;
while ((match = reg.exec(str))) {
  console.log(`匹配项: ${match[0]}, index: ${match.index}`);
}
// 匹配项: arr[0], index: 28
// 匹配项: arr[1], index: 36
// 匹配项: arr[2], index: 44

4.3.2 匹配字母和数字(与非字母和数字)

元字符 说明
\w 匹配任何一个字母数字字符(不区分大小写)或下划线字符,等价于 [a-zA-Z0-9_]
\W 匹配任何一个非字母数字字符或非下划线字符,等价于 [^a-zA-Z0-9_]

4.3.3 匹配空白字符(与非空白字符)

元字符 说明
\s 匹配任何一个空白字符,等价于 [\f\n\r\t\v]
\S 匹配任何一个非空白字符,等价于 [^\f\n\r\t\v]

注意:[\b] 比较特殊,没有包含了 \s 中。

4.3.4 匹配十六进制或八进制数值

1. 使用十六进制值

正则表达式里,十六进制要用前缀 \x 来表示。

\x0A 对应于 ASCII 码中的 10(换行符),等价于 \n。

2. 使用八进制值

使用前缀 \0 表示。

4.4 使用 POSIX 字符类

JavaScript 不支持。

posted @ 2019-07-20 10:42  狸子同学  阅读(229)  评论(0编辑  收藏  举报