正则表达式
1.什么是正则表达式?
正则表达式是一个字符串
正则表达式是一个用来对字符串进行处理的字符串
字符串的处理:
匹配
match
提取
match
替换
replace
切割
split
例子:
验证QQ号码:
function yanzheng() {
//取得输入框的值
let qq = document.querySelector("#qq").value;
let regex = "^[1-9]\d{4,10}$";
let t = qq.match(regex);
if (t) {
alert("是一个合法的QQ");
} else {
alert("不合法");
}
}
验证手机号码:
function check() {
let telnum = document.querySelector("#telnum").value;
let regex = /^(1[3-9]\d{9})$/;
let t = telnum.match(regex);
if (t) {
alert("是一个合法的手机号");
} else {
alert("不合法");
}
}
2.正则表达式的组成
字符
数量
边界词
修饰词
分组
字符:
a b c 任何一个字符都可以作为正则表达式的字符
[abcd] 表示一个字符 a或者b或者c或者d
[a-z] 表示所有的小写字母
[A-Z] 表示所有的大写字母
[h-m] 表示h到m之间的所有小写字母
[^abc] 表示除了abc之外的所有字符
[0-9] 表示所有的阿拉伯数字
[a-zA-Z_0-9] 表示单词字符[小写字母 大写字母,_,阿拉伯数字]
[a-gm-z]预定义字符
. 表示一个任意字符
\w 表示单词字符,相当于[a-zA-Z_0-9]
\W 表示非单词字符
\d 表示所有的数字,相当于[0-9]
\D 表示非数字
\s 表示空白字符 空格 \r \n \t
\S 表示非空白字符
数量词
数量词用在字符的后面,用来定义这个字符的个数
[a]{n} 表示a出现n次
[a]{n,} 表示a至少出现n次
[a]{n,m} 表示a至少出现n次,最多出现m次
[a]? 表示a出现0次或1次
[a]* 表示a出现0次或者多次
[a]+ 表示a出现1次或多次
贪婪性数量词
JavaScript中默认是贪婪性的数量
java中在数量词后用+表示贪婪性
懒惰性数量词
{3,}? 数量是3次及以上,但尽可能少
{3,10}? 数量是3到10次,但尽可能少
?? 数量是0次或1次,但尽可能少
*? 数量是0次或多次,但尽可能少
+? 数量是1次或多次,但尽可能少
边界词
^ 行开头
$ 行结尾
\b 单词边界
转义字符
\
转义字符是用来对字符的用途进行转换的
w \w
. .
修饰词
g 全局匹配,默认情况下,正则表达式只匹配一次
全局匹配会将所有符合要求的内容匹配出来
i 忽略大小写
语法格式:/正则/gi
例子:
<script>
let str="hello World,Hello china,HELLO Newer";
//定义正则表达式
let regex = /Hello/ig;
let s = str.match(regex);
console.log(s);
</script>
<script>
//匹配出b开头,d结尾的字符串
let s = "bdbcdebcerd";
let regex =/b[a-z]*d/g;
let t = s.match(regex);
console.log(t);
</script>
分组及分组的捕获
使用()对正则表达式分组
整个表达式默认是一个分组,下标默认是0
每一个分组都有一个默认的下标
下标是从0开始的连续的整数
由于一般情况下,整个表达式分组的括号是不写的,所以一般我们看到的第一个括号就是第二组,下标为1
通过下标可以捕获分组
捕获方式: \下标
A(B(CD)) 下标是0
(B(CD)) 下标是1
(CD) 下标是2
断言
1.(?<=exp)regex 匹配一个正则表达式,左边必须满足断言条件
<script>
//找出电话号码
//实际上找出连续的11个数字,并且数字前面必须是 tel:
let msg = "帮小学生写作业,游戏练级,tel:13912345678,QQ:13812345567,wx:12345678901";
let regex = /(?<=tel:)\d{11}/g;
let t = msg.match(regex);
console.log(t);
</script>
2.regex(?=exp) 匹配一个正则表达式,右边必须满足断言条件
<script>
//找出:前面的英语单词内容,
let msg = "帮小学生写作业,游戏练级,tel:13912345678,QQ:13812345567,wx:12345678901";
let regex = /([A-Za-z]{2,3})(?=:)/g;
let t = msg.match(regex);
console.log(t);
</script>
3.(?<!exp)regex 匹配一个正则表达式,左边必须不满足断言条件
<script>
//找出电话号码以外的11位数
//实际上找出连续的11个数字,并且数字前面必须不是 tel:
let msg = "帮小学生写作业,游戏练级,tel:13912345678,QQ:13812345567,wx:12345678901";
let regex = /(?<!tel:)\d{11}/g;
let t = msg.match(regex);
console.log(t);
</script>
4.regex(?!exp) 匹配一个正则表达式,右边必须不满足断言条件
<script>
//找出后面没有跟数字的字母
let msg = "12345need-gesgse133need1234";
let regex = /[a-z]+(?![0-9]+)/g;
let t = msg.match(regex);
console.log(t);
</script>
例:
验证一个手机号码是不是合法的?
/^1[3-9][0-9]{9}$/;
验证一个邮箱是不是合法的?
[email protected] 例如:[email protected]
[email protected] 例如:[email protected]
/^\w+@\w+(.[a-zA-Z]+){1,2}$/
验证一个网址是不是合法的
http://xxx.xxx.xxx/xx/xx/xx?xx=x&xx=x
https:///^https?: //(\w+.)?\w+(.[a-zA-Z]+){1,2}/.*$/
查看字符串的API文档,处理以下任务:
1.let str=“Hello World,hello china,HELLO Newer”;
将字符串中的三个 hello修改成 nihao
/Hello/ig
let s = str.replace(regex,‘nihao’);
2.let str=“zhangsan,lisi|wangwu?zhaoliu”;
将字符串中的四个姓名取出来
let regex = /[,|?]/;
let s = str.split(regex);
3.let str=“ma shang jiu shi zhou mo le,zhong yu ke yi fang song le”;
找出这句话中的所有四个字母的单词?
<script>
let str="ma shang jiu shi zhou mo le,zhong yu ke yi fang song le";
let regex=/\b[a-z]{4}\b/gi;
let s = str.match(regex);
console.log(s);
</script>