概念
正则:由一些符号和一些特殊符号组成的一种模式
作用:检测字符串是否符合规则的一种模式
定义正则模式:
- var reg = / 正则规则 /
- var reg = new RegExp(正则规则)
正则提供了一个方法来判断字符串是否符合正则的规则
test()正则的规则,必须要正则来调用
返回值:布尔值,如果字符串符合正则的规则返回true 不符合返回false
var reg = /\d/;
var str = "dskufh7";
var res = reg.test(str);
console.log(res);
正则的元字符
\d : 表示数字
\D :表示非数字
\s :表示空格
\S :表示非空格
\w : 表示数字,字母,下划线
\W : 表示非数字,字母,下划线
. 表示非换行以外的任意字符
正则的限定符:主要限定字符出现的次数
* : 表示符号前面的字符可以出现0-正无穷
+ : 表示符号前面的字符可以出现1-正无穷,至少出现1次
? : 表示符号前面的字符可以出现0-1次 至多出现一次
{n}:表示符号前面的字符出现连续的n次
{n, }:表示符号前面的字符至少出现n次
{n,m}:表示符号前面的字符串出现n-m次
正则的边界符
^:表示以什么开头
$:表示以什么结尾
//以 s开头,以5个数字结尾
// var reg = /^s\d{5}$/;
163邮箱验证
数字 字母 下划线组成 @163.com
. 非换行以外的任意字符
// 有一些字符有特殊函数,如果需要值表示这个字符,用 \ 转义
// 把一些有特殊函数的字符转义成普通的字符 . ==>\.
// 把一些普通的字符转义为有特殊含义的字符 s ==>\s
var reg = /^\w{8,16}@163\.com/;
var str = "3874yduy@163.com";
console.log(reg.test(str));
正则中的特殊字符
\ :转义
| :或
( ) :表示一个整体
[ ]:满足括号里面的一个值其中一个即可
-: 到,一般写在中括号 0-9 a-z A-Z
[^]:只要不是括号里面的任何字符都可以
正则严格区分大小写
- 字符是1或者2345
var reg=/^1|2345$/ - 字符是以1开头或者2开头 1345||2345
var reg=/^(1|2)345$/
验证邮箱的案例
/*
@163.com
@qq.com
@126.com
@126.cn
*/
var reg = /^\w{8,16}@(163|qq|126)\.(com|cn)$/;
var str = "321274hsh@qq.cn";
console.log(reg.test(str));
验证0-255之间的数
// var reg = /^[0-255]$/;
/*
一位数字:0-9 \d{1}
两位数字:10-99 \d{2}
三位数字:100-255
1开头: 100-199 1\d{2}
2开头:
200-249 2[0-4]\d{1}
250-255 25[0-5]
*/
var reg = /^(\d{1}|\d{2}|1\d{2}|2[0-4]\d{1}|25[0-5])$/;
var str = 10;
console.log(reg.test(str));
正则中的方法
标识符:
g:全局
i:忽略大小写
//exec()捕获字符串中满足正则关系的字符,只捕获一次
//返回值:返回一个数组,数组中值为满足条件的字符
//当第二次调用exec()的时候 会从第一次捕获的索引开始往后捕获
//如果没有g的时候 每次调用exec()都会从索引为0开始捕获
字符串可以写正则的方法
必须用字符串调用
【1】replace(/正则/,用什么字符替换)
【2】search()判断字符串是否存在某个字符,跟indexOf一样,但是search 可以写正则,但是indexOf不可以写正则
【3】match()跟正则的exec()方法一样,去字符串捕获满足正则规则的字符
区别:exec()需要循环多次执行才能获取所有满足条件的字符
match()只要给 g 的时候可以自动捕获多次,把所有满足条件的字符返回
var str = "egyes11wgMSew11dgwMSwem11sgdMSyesewj";
var res = str.match(/(11|ms)/gi);
console.log(res);
================================
var res = reg.exec(str);
var arr = [];
while (res) {
// console.log(res);
arr.push(res[0]);
res = reg.exec(str);
}
console.log(arr);
验证出生年月日的案例
/*
2020-10-10
2020.20.20
2020/20/20
\1: 这个字符跟第一个圆括号中的字符保持一样
\2:表示跟第二个圆括号中的值保持一样
月份:1-12
1位数:1-9 [1-9]
2两位数的:10-12 1[0-2]
日期:
1-31
1位数:1-9 [1-9]
两位数:10-31
1开头的: [12]\d{1}
3开头: 3[01]
*/
var reg = /^\d{4}(\-|\.|\/)([1-9]|1[0-2])\1([1-9]|[12]\d{1}|3[01])$/;
var str = "2020/12/24";
console.log(reg.test(str));