正则:一种专门用来处理字符串的规则
处理:匹配,捕获
有一段正则和一个字符串,匹配的意思是看看这个字符串是否符合这个正则定义的规则, 有一段正则和一个字符串,捕获的意思是把这个字符串中符合这个规则的部分获取到
特殊元字符:
\d 代表数字
\D 代表除了数字以外的其他字符
\w 代表数字或字母或下划线
\W 代表数字字母下划线以外的字符
^ 代表以什么开头 在正则的最前面
$ 代表以什么结尾 在正则的最后面
[a,b] // a或b /^[xy]$/:要不是以x开头结尾,要不就是以y开头结尾
[^ab] //除了ab以外的其他字符
[a-z] //大白话就是小写字母
[A-Z] 代表大写字母
[a-zA-Z] 代表所有字母
a|b a或b
. 代表除了换行以外的其他字符 若在[]里面就代表点本身
() 提升优先级 分组(捕获时用到的概念)
/^11|12$/ 11开头或者12结尾
/^(11|12)$/ 要么11,要么12
量词元字符(量:数量)用在要修饰的字符串的后边
? /\d?/ 代表前面的字符出现0或1次
+ 代表前面的字符出现1到多次
* 代表前面的字符出现0到多次
{n} 代表前面的字符出现n次
{n,} 代表前面的字符出现n到多次
{n,m} 代表前面的字符出现n到m次
修饰符
g global 全局匹配 最多用于捕获,匹配很少用
i ignoreCase 忽略大小写
m multiline 多行匹配
box.innerHTML=' \d 在正则中表示数字的意思' // \d在字符串中 表示把d字符串转义成d字符本身
box.innerHTML=' \\d 在正则中表示数字的意思' // \\d在字符串中 前面的\把后面\的转义成\本身
习题
正则手机号
<body>
<h1 id="box"></h1>
<input type="text"placeholder="输入手机号"id="inp">
<button id="btn">登录</button>
</body>
</html>
<script>
// 开头3-9 11位
// /\d{11}/ 只要字符串中有11位即可
// /^\d{11}$/ 以这11位开头,以这11位结尾
let reg9 = /^1(56|89|82|31|32)\d{8}$/
btn.οnclick=function(){
let val= inp.value;
let bol=reg9.text(val)
if (bol==false){
alert=("手机号不合法")
}else{
console.log(val);
}
}
</script>
正则身份证号
let reg10 = /^\d{17}(\d|X)$/
btn.οnclick=function(){
let val= inp.value;
let bol=reg10.text(val)
if (bol==false){
alert=("身份证不合法")
}else{
console.log(val);
}
}
正则取18到65岁年龄段
let reg11 = /^1[8-9]|[2-5]\d|6[0-5]$/
密码只能是 数字,字母 _ . + - @ $组成的8到15位字符
let res = /^[+\-]?(\d|[1-9]\d+)(\.\d+)?$/
let res2 = /^\d|[a-zA-Z]|\_|\.|\+|\-|\@|\${8,15}$/
let res3 = /^(?=.*[A-Z]).{8,15}$/
---------------------------------------------------------------------------------------------------------------------------------
捕获
<script>
// 捕获的贪婪性 一次捕获,尽可能多的去获取内容 解决贪婪:就在量词后面加问号
// 捕获的懒惰性 只捕获一次 解决懒惰:使用修饰符 g,并输出两次
var str = '珠峰2009珠峰2022';
var reg=/\d+/g; // reg.lastIndex 代表的就是当次匹配或者捕获对应字符串的开始索引
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
console.log(reg.exec(str));
RegExp.prototype.execAll=function(str){
this.lastIndex=0; // 防止这个正则的lastIndex不是0而导致获取的内容不对
let ary = []
let res = this.exec(str)
while(res){
ary.push(res[0])
res = this.exec(str)
}
return ary
}
console.log(reg.execAll(str));
</script>