正则表达式



【补充点】

1.JS创建正则表达式

1
2
3
4
5
6
7
8
9
// 1.字面量创建方式(两个斜杠之间的,都是用来描述规则的元字符)
let reg1 = /\d+/

// 2. 构造函数模式创建,有两个参数:元字符字符串,修饰符字符串
let reg2 = new RegExp('\\d+')
//当需要把变量加入到正则表达式中时,不能使用字面量的方式创建,只能用构造函数去创建
// var patt=new RegExp(pattern,modifiers);
//pattern(模式) 描述了表达式的模式
//modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配

正则表达式由两部分组成

  • 元字符
  • 修饰符

常用元字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 1.量词元字符:设置出现的次数
* 零到多次
+ 一到多次
? 零次或者一次
{n} 出现n次
{n, } 出现n到多次
{n, m} 出现n到m次

// 2.特殊元字符:单个或者组合在一起代表特殊的含义
\ 转义字符(普通->特殊->普通)
. 除\n(换行符)以外的任意字符
^ 以哪一个元字符作为开始
$ 以哪一个元字符作为结束
\n 换行符
\d 0~9之间的一个数字
\D 非0~9之间的一个数字
\w 数字、字母、下划线中的任意一个字符
\W 非数字、字母、下划线中的任意一个字符
\s 一个空白字符(包含空格、制表符、换页符等)
\t 一个制表符(一个TAB键:四个空格)
\b 匹配一个单词的边界
x|y x或者y中的一个字符
[xyz] x、y、z中的一个字符
[^xy] 除了xy以外的任意一个字符
[a-z] 指定a-z这个范围中的任意一个字符 [0-9a-zA-Z_] === \w
[^a-z] 除了a-z这个范围中的任意一个字符
() 正则中的分组符号
(?:) 只匹配不捕获
(?=) 正向预查
(?!) 负向预查

// 3.普通元字符:代表本身的含义
/js/ 此正则匹配的就是 "js"

常用修饰符:i m g

1
2
3
4
5
6
i: ignoreCase   忽略单词大小写匹配
m: multiline 可以进行多行匹配
g: global 全局匹配

/A/.test('lalalala') //false
/A/i.test('lalalala') //true

元字符详细解析

^ $

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let reg = /^\d/  //必须以数字开头
console.log(reg.test('js')) //false
console.log(reg.test('2021js')) //true
console.log(reg.test('js2021')) //false
----------------------------------------
reg = /\d$/ //必须以数字结束
console.log(reg.test('js')) //false
console.log(reg.test('2021js')) //false
console.log(reg.test('js2021')) //true
----------------------------------------
//^ $两个都不加:字符串中包含符合规则的内容即可
reg = /\d+/:字符串中包含1到多个数字即可
----------------------------------------
//^ $两个都加:字符串只能是和规则一致的内容
reg = /^\d+$/
----------------------------------------
//验证手机号(11为,以1开头)
reg = /^1\d{10}$/

\

1
2
3
4
5
6
7
8
9
10
11
12
13
let reg = /^2.3$/   // .不是小数点,是\n外的任意字符
reg.test('2.3') //true
reg.test('2@3') //true
reg.test('23') //false
----------------------------------------
reg = /^2\.3$/ //只能代表2.3了
----------------------------------------
//匹配"\d"
let str = "\\d" //在字符串中\也有特殊含义
reg = /^\d$/ //不能匹配str
reg = /^\\d$/
reg.test("\\d") //正确匹配str

x|y

1
2
3
4
5
6
7
8
9
10
11
12
13
let reg = /^18|29$/
reg.test('18')
reg.test('29')
reg.test('129')
reg.test('189')
reg.test('1829')
reg.test('829')
reg.test('182')
//以上结果全为true
----------------------------------------
//------直接x|y会存在很乱的优先级问题,可以用小括号处理 => 小括号:分组
reg = /^(18|29)$/ //只能是18或者29

[]

1
2
3
4
5
6
7
8
9
10
// 1. 中括号中出现的字符一般都代表字符本身的含义
let reg = /^[@+]+$/ //@或者+ 出现一到多次

reg = /^[\d]$/ // \d在[]中代表0-9的一个数字
reg = /^[\\d]$/ // \ 或者 d
----------------------------------------
// 2. 中括号中不存在多位数
reg = /^[18]$/ //只能匹配1或者8,不能匹配18
reg = /^[10-29]$/ // 1或者0-2或者9

文章作者: qinwei
文章链接: https://qw-null.github.io/2021/08/13/正则表达式/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QW's Blog