正则表达式(关于正则表达式的一些基础介绍)
什么是正则表达式?
- 正则表达式是由一组字母和符号组成的特殊文本,它可以用来从文本中找出满足你需要的格式的句子
- 从左到右匹配主题字符串的模式。全称:Regular expression(regex/regexp)
知识章节
1. 基本匹配
- 1.1 正则表达式执行搜索时的格式,由字母和数字组合而成。
- 1.2 例如:"the" => *the* fat cat sat on the mgitat.
2. 元字符
- 2.1 点运算符 .
- 匹配任意单个字符,但不匹配换行符。例如表达式.ai匹配任意字符后面是ai的字符串。
".ai" => "wo *lai* le, ni ai wo ma ?"
const parttern = /.ai/;
const str = "wo lai le, ni ai wo ma ?";
const match = str.match(parttern);
- 2.2 字符集
a. 字符集也叫做字符类。方括号用来指定一个字符集。在方括号中使用连字符来指定字符集的范围,不关心其顺序例如:
"[Tt]he" => *The* car parked in *the* garage.
b. 否定字符集。^一般是表示字符串的开头,但是用在[^]里表示否定。例如:
"[^c]ar" => The car parked in the garage.
- 2.3 重复次数
a. 后面跟着元字符+,*,?的,用来指定匹配子模式的次数。这些元字符在不同的情况意思不同。
b. *号,跟在*号面前的字符>=0次。例如:[a-z]* => M(y name is zhouxiahao).
c. +号,匹配+号之前的字符出现>=1次。例如:c.+t 匹配以首字母c开头以t结尾,中间跟着至少一个字符的 字符串。
d. ?号,匹配?号前的字符出现0次或1次。例如:[T]?he。
e. {}号,量词,{2,3}表示最少2位最多3位,{2,}表示>=2位, {2}表示=2位。
f. (...), 特征标群是一组写在 (...) 中的子模式。
g. | 或运算符,用作判断条件。
h. 反斜线 \ 在表达式中用于转码紧跟其后的字符。用于指定 { } [ ] / \ + * . $ ^ | ? 这些特殊字符。如果想要匹配这些特殊字符则要在其前面加上反斜线 \。例如:
如果想要匹配句子中的 . 则要写成 \. 以下这个例子 \.?是选择性匹配.
"(f|c|m)at\.?" => The fat cat sat on the *m*at.
h. 锚点,指定开头和结尾:^指开头,$结尾。
3. 简写字符集
简写 描述
. 除换行符外的所有字符
\w 匹配所有字母数字,等同于 [a-zA-Z0-9_]
\W 匹配所有非字母数字,即符号,等同于: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]
\s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
\S 匹配所有非空格字符: [^\s]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\p 匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符
4. 零宽度断言(前后预查)
- 4.1 ?=... 正先行断言
定义一个正向先行断言需要使用(?=...)包裹住。返回结果只包含满足匹配条件的第一部分表达式。例如:
"like(?=\slemon)" => I love the lemon, ary you *like* lemon?
- 4.2 ?!... 负先行断言
用于筛选所有匹配结果,筛选条件为后面不跟随着断言里定义的格式,与正先行断言相反。例如:
"/(T|t)he(?!\sfat)/" => The fat cat sat on at *the* lat.
- 4.3 ?<=... 正后发断言
用于筛选所有匹配结果,筛选条件为其前跟随着的断言中定义的格式。例如:
"(?<=(T|t)he\s>)(fat|mat)" = > The *fat* cat sat on at the *mat*.
// ['fat', 'T', 'fat', index: 4, input: 'The fat cat sat on the mat.', groups: undefined]
- 4.4 负后发断言
用于筛选所有匹配结果,筛选条件为其前不跟随着断言中定义的格式。例如:
"(?<!(T|t)he\s)(cat)" => The cat sat on *cat*.
5. 标志(模式修正符),修改表达式的搜索结果。这些表达式可以任意的组合使用。
- i 忽略大小写
- g 全局搜索
- m 多行修饰符,例如:
"/.at(.)?$/gm" => The fat
cat sat
on the mat.
6. 贪婪匹配与惰性匹配
正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式。
"/(.*at)/" => *The fat cat sat on the mat*.
改为惰性匹配
"/(.*?at)/" => *The fat* cat sat on the mat.
参考链接
· https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md#1-%E5%9F%BA%E6%9C%AC%E5%8C%B9%E9%85%8D