Skip to content

正则表达式

一般用在表单验证

按住 ctrl 点我啊

作用:

​ 用来匹配字符串是否满足一定的规则。

用法:

1.先创建一个正则对象

js
// 用构造函数实现
let reg = new RegExp("规则");

// 另外一种简单的写法 ---> 以字面量的方式创建对象
let reg = /规则/;

2.调用方法,看是否满足条件(规律)

js
// test方法返回一个布尔值
let flag = reg.test("需要判断的字符串");

元字符

在匹配以什么开头,什么结尾的时候,中间要加个.

js
let reg = /^1(aa)$/;
console.log(reg.test("12aa")); //返回false
js
let reg = /^1.(aa)$/;
console.log(reg.test("12aa")); //返回true

注意一个.只代表一个字符

js
let reg = /^1.(aa)$/;
console.log(reg.test("122aa")); //返回false

数量限定

一般要配合其他规则一起使用

预定义个数

* : 可以出现任意次 (0-n)

+ : 至少出现一次 (1-n)

? : 出现0 次或者1 次 (0-1)

使用* : 匹配以 1 开头,aa 结尾,中间可以有任意的字符

js
let reg = /^1.*(aa)$/;
console.log(reg.test("1 4564hfrthuaa")); //返回true

下面这个例子为什么返回 true?

js
let reg = /\d?/;
console.log(reg.test("1234")); // 返回true

再次强调一下,正则表达式的作用是用来匹配字符串是否满足一定的规律,并不是要求字符串是什么样子的

可以简单的理解为,有还是没有。上面的例子,被验证的字符串中有出现一次或者零次的数字,所以返回 true。

非贪婪匹配模式

?紧跟着其他的限制符时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串

js
let reg = /[0]+?/; // 匹配一次
let reg1 = /[0]+/; // 匹配多次
let s = "10000aa".match(reg);
let s1 = "10000aa".match(reg1);
console.log(s); // ["0", index: 1, input: "10000aa", groups: undefined]
console.log(s1); // // ["0000", index: 1, input: "10000aa", groups: undefined]

自定义个数

{n} : 表示匹配出现 n 次

{n,} : 表示匹配至少出现 n 次

{n,m} : 表示匹配出现 n-m 次

js
let reg = /a{1}/
console.log(reg.test('1a56')); //返回true

这里和上面一样,只会关心他有没有出现1次,具体字符串是在怎么样的不管
console.log(reg.test('1aaaaa56'));//返回true

通常也要联合其他一起用

js
let reg = /^a\d{2}b$/;
console.log(reg.test("a123b")); //false
js
let reg = /a{1,}/;
console.log(reg.test("1aaaaa56")); //返回true
console.log(reg.test("156")); //返回false
js
let reg = /a{1,2}/;
console.log(reg.test("1aa56")); //返回true

其他常用元字符

总结

正则表达式,只能用于验证字符串是否满足条件(有还是没有),并不是要求字符串是什么样子的。

\w\W通常用于用户名的验证,注意:\w只要出现 字母、数字、下划线 其中的一种,都会返回 true。

空白字符包括 空格、回车(\r) 或者 换行(\n) 、缩进(\t)。

$ 验证特定的字符串的时候记得加(), let reg = /(aa)$/ 这表示验证以 aa 结尾。

.可以匹配空格,但不能匹配\r \n

匹配不是中文:/[^\u4e00-\u9fa5]/

()用于提升优先级,分组

在正则表达式中对空格是敏感的