正则表达式详解
1.正则自身的方法
reg.test(str),检测字符串str中是否包含reg规则,返回布尔值
let reg = /wang/;
let str = "wangsffdsddgwan";
console.log(reg.test(str))//结果返回true
reg.exec(str),返回包含匹配结果的数组,没有则返回null,如果正则有g(全局的意思)标志,那么继续调用reg.exec(str)时,紧接着上传的匹配位置往下匹配
let reg = /wan/g;
let str = "wangdfsssgsgwan";
console.log(reg.exec(str));//结果返回一个数组第一项为正则要查找的字符串,第二项为找到该字符串的第一个字符的位置,第三项为整个字符串
2.字符串中能使用正则的方法
str.match(reg),返回包含匹配结果的数组,和exec类似
let reg = /wan/;
let str = "wangfsffwgdswan";
console.log(str.match(reg));
str.replace(reg,str(function)),将匹配的内容用第二个参数的str或者函数返回值替换,返回替换得到的新字符串
let reg = /wan/;
let str = "wangwfsjfsfwan";
let str1 = "ds";
console.log(str.replace(reg.str1))//结果返回一个替换得到的新字符串
str.split(reg),按照正则规则切割
let reg = /_/;
let str = "wangsfh_sfsd_kfwan";
console.log(str.split(reg));//结果返回一个数组,里面有三个字符串,就是以_分割的三块
2.标志
可以在正则表达式后加上标志,标志分为三种:i(不区分大小写),g(全局匹配),m(换行匹配)
let reg = /afe/i;
3.转义
特殊配合
\s \S 空格 非空格
\d \D 数字 非数字
\w \W 字符(数字、字母、下划线) 非字符
\b \B 独立部分(起始位置,结束位置,以及除了\w外的部分) 非独立部分
特殊符号转义
比如要匹配/这个字符,不能直接写,需要转义,正则里面需要转义的特殊符号有:()[]{}/^$|?*+.
let reg = /\s\d\w\b\[\]/;
4.量词
{n}匹配n个
let str = "sfsaafsh24241gasdf424";
let reg = /\d{2}/
console.log(str.match(reg));//匹配两个数字,所有结果返回和exec一样,只是第一项为字符串"24"
{n,m}匹配n~m个,包含n也包含m
let str = "sfsgsh42342gssa223234";
let reg = /\d{2,6}/;
console.log(str.match(reg));//可以匹配2-6个连续的数字,所以结果为,"42342"
{n,}n~无穷大个,包含n
let str = "sfsfhflf52344sdsglgj969";
let reg = /\d{2,}/;
console.log(str.match(reg));//可以匹配2到无穷个连续数字,只要不连续,加上g全局之后,会分为若干的段,这个结果返回为52344
量词特殊写法
{1,}可由 + 代替/*1到无穷大/
{0,}可由 * 代替/*0到无穷大/
{0,1}可由 ? 代替/*0或者1,可有可无/
5.子项
定义正则时,可以用()将部分规则包裹起来,这样在使用match或者exec做匹配的时候,能在得到的结果里面拿到该部分匹配的内容。
“abcd34adf”.match(/d(\d+))/*返回一个已d开头,后面是数字的字符串/
会得到数组[“d34”,“34”]
6.字符集
范围
可以使用字符集来匹配某一个范围的字符,比如:
[3-9],匹配3-9之间的任一数字字符
[a-z],匹配a-z之间的任一字母字符
[\u4e00-\u9fa5],匹配任一汉字字符
或者
可以使用字符集来表示或者的需求,比如:
[abc],匹配a或者b或者c字符
[0-9A-Z],匹配数字或者大写字母字符
[^abc],匹配除了abc三个字符之外任一字符
大部分在外面有特殊意义的符号,在这里都没有特殊意义,不需要转义,比如:[(){}],匹配(或)或{或}字符。而-字符在字符集里有特殊意义,所有要在字符集里表示-符号需要转义
7.其他特殊字符
^和$
^和$分别表示匹配开始位置和匹配结束位置
.
.表示匹配任意字符,即使在字符集里面,也表示匹配任意字符
8.常用用户名、密码、邮箱正则表达式
用户名:
汉字、字母、数字一般6到12位
^[\u4e00-\u9fa5a-zA-Z0-9]{6,12}$
密码:
一般包含数字、大小写字母、特殊符号
至少1个大写字母
(?=.*?[A-Z])
至少1个小写字母
(?=.*?[a-z])
至少1为数字
(?=.*?[0-9])
至少有1个特殊字符
(?=.*?[!@#$%^&*-_+=])
至少8个字符,至少1个字母,1个数字和1个特殊字符
^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$
邮箱:
只允许英文字母、数字、下划线、英文句号、以及中划线组成
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$