Skip to content

匹配单个字符型元字符

元字符中文名称匹配对象
.点号匹配(除换行符之外)单个任意字符
[]字符组匹配单个列出的字符
[^]排除型字符组匹配单个未列出的字符

语法声明

本页示例使用的JavaScript正则语法声明 const regexp = /pattern/flags:

点号 .

元字符.的作用是匹配任意单个字符,像这样:

javascript
const regexp = /./;
const result = regexp.exec("AchooLuv");
console.log(result[0]); // 匹配结果为: A

也可以使用标准量词改变其匹配的数量,像这样:

javascript
const regexp = /.{3}Luv/;
const result = regexp.exec("AchooLuv");
console.log(result[0]); // 匹配结果为: hooLuv

在字符组内部

javascript
const regexp = /[.]/;
const result = regexp.test("AchooLuv");
console.log(result); // 匹配结果为: false

此时元字符.被正则引擎视为普通字符点号,而匹配字符串AchooLuv不包含字符.,故匹配失败。

字符组 []

元字符[]的作用是匹配单个列出的字符,像这样:

javascript
const regexp = /[Lo]/;
const result = regexp.exec("AchooLuv");
console.log(result[0]); // 匹配结果为: o

奇怪!匹配结果为什么不是字符L呢?

再看看这个例子:

javascript
const regexp = /[Lo]{2}/;
const result = regexp.exec("AchooLuv");
console.log(result[0]); // 匹配结果为: oo

咦?为什么还是没有字符L呢?至于为什么会是这些匹配结果,你可以前往匹配原理中引擎的匹配规则了解详细介绍!

排除型字符组 [^]

元字符[^]的作用是在文本中匹配字符组内未列出的第一个字符,像这样:

javascript
const regexp = /[^Achoo]/;
const result = regexp.exec("AchooLuv");
console.log(result[0]); // 匹配结果为: L

当你看完了匹配原理中的引擎的匹配规则时,可以检验下自己是否真的看懂了:

逐一尝试
javascript
const regexp = /[^choo]{2}/;
const result = regexp.exec("AchooLuv");
console.log(result); // 匹配结果为: ['Lu', index: 5]

const regexp = /[^hoo]{2}/;
const result = regexp.exec("AchooLuv");
console.log(result); // 匹配结果为:['Ac', index: 0]

const regexp = /[^hoo]{3}/;
const result = regexp.exec("AchooLuv");
console.log(result); // 匹配结果为:['Luv', index: 5]

const regexp = /[^hoo]{4}/;
const result = regexp.exec("AchooLuv");
console.log(result); // 匹配失败,返回:null