淘先锋技术网

首页 1 2 3 4 5 6 7

正则表达式
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>