正则表达式
时间: 2024-06-11
元字符
元字符 | 描述 |
---|---|
. |
单个字符,除了换行 |
\w | 单词字符 |
\W | 非单词字符 |
\d |
数字 |
\D | 非数字字符 |
\s |
空白字符 |
\S | 非空白字符 |
\b |
匹配单词边界 |
\B | 匹配非单词边界 |
\0 | NUL字符 |
\n | 换行符 |
\f | 换页符 |
\r | 回车符 |
\t | 制表符 |
\v | 垂直制表符 |
\xxx | 以八进制数 xxxx 规定的字符 |
\xdd | 以十六进制数 dd 规定的字符 |
\uxxxx | 以十六进制 xxxx规定的 Unicode 字符 |
表示字符的方法有多种,除了可以直接使用字符本身外,还可以使用 ASCII 编码或者 Unicode 编码来表示。
描述字符范围
在正则表达式语法中,方括号[]
表示字符范围。
如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。
如果在方括号内添加脱字符^
前缀,还可以表示范围之外的字符。例如:
[abc]:查找方括号内任意一个字符。
[^abc]:查找不在方括号内的字符。
[0-9]:查找从 0 至 9 范围内的数字,即查找数字。
[a-z]:查找从小写 a 到小写 z 范围内的字符,即查找小写字母。
[A-Z]:查找从大写 A 到大写 Z 范围内的字符,即查找大写字母。
[A-z]:查找从大写 A 到小写 z 范围内的字符,即所有大小写的字母。
关于正则表达式中的分组
正则表达式的分组能够将子表达式做成子集,使用()
进行分组,方便对match
的字符串进行划分。
分组语法
语法 | 说明 |
---|---|
(exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
(?:exp) | 匹配exp,不捕获匹配的文本 |
位置指定
语法 | 说明 |
---|---|
(?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
分组的实例
let str = "<xml><MsgId>1234567890123456</MsgId></xml>";
let patten = /<([\w-:.]+)/;
let matched = str.match(patten);
let pattenName = /<(?<tag>[\w-:.]+)/;
let matchedName = str.match(pattenName);
if (!matched || !matchedName) {
throw new Error("fuck");
}
// undefined { tag: "xml" }
console.log(matched.groups, matchedName.groups);
关于 | 符号的使用
在编程中,||
通常表示或
的关系。|
在正则中也表示或的意思。
比如,我们要匹配以下情况: 狗
是动物;猫
是动物;牛
是动物。
是动物三个字是必不可少的,但是前面的是限定词,那如何定义呢?
可以使用/(狗|猫|牛)是动物/
这样的表示。
常用实例
含义 | 表达式 |
---|---|
不包含某字符串 | ^((?!name).)*$ |