正则表达式

本文介绍了正则表达式在前端开发中的重要性,详细讲解了正则表达式的语法、创建方式以及相关方法,包括字符串方法和正则方法。内容涵盖了字符集、修饰符、边界、预定义类、量词、分组与或操作符,以及分组的反向引用。通过实例演示如何使用正则表达式进行字符串匹配、分割、替换等操作,特别强调了在处理中文匹配上的应用。


前言

在前端中学习正则表达式是非常有必要的,在实际开发中会经常使用正则表达式。
正则表达式:(Regular Expression)用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。


一、正则表达式

正则表达式的作用:
1.给定的字符串是否符合正则表达式的过滤逻辑(匹配)
2.可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
3.强大的字符串替换能力(替换)

正则表达式语法

可以通过两种方式创建正则表达式:
(1)通过字面量的方式创建正则表达式 /abc/
(2)通过构造函数创建正则表达式 new RegExp(“abc”)
注意:通常使用字面量的方式创建正则表达式
接下来通过代码来体会创建正则表达式

    <script>
        //字面量创建正则表达式
        var reg = /abc/;
        //构造函数创建正则表达式
        var reg1 = new RegExp("abc");
    </script>

二、相关正则方法

1.字符串方法

(1)split:根据匹配的字符串分割父字符串
(2)search:使用正则表达式搜索字符串所在位置,并返回下标。
(3)match:使用正则表达式跟字符串作比较,返回一个包含匹配结果的数组。
(4)replace:使用正则表达式替换字符串,返回替换后的整个字符串。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //splice 方法: 分隔所匹配的指定字符串
        var str = "aa bbb    c dd eeeeee";
        var arr = str.split(/\s+/);
        console.log(arr);
        var str1 = "bbaacaaaadddaeeeeeaaf";
        var arr1 = str1.split(/a+/);
        console.log(arr1);

        //search 方法: 根据正则表达式找到字符串,并返回下标位置
        var str = "abcdefg";
        var a = str.search("cd");
        var b = str.search(/cdf/);
        console.log(a);
        console.log(b);

        //match 方法: 根据正则表达式匹配字符,返回一个包含匹配字符的数组
        var str = "abbcccbbbbbddbbbdabbb";
        var arr = str.match(/b+/);
        console.log(arr);
        var arr1 = str.match(/b+/g);
        console.log(arr1);
        var str1 = "aaaa o  o bbb o     o  aaa";
        var arr2 = str1.match(/o\s+o/g);
        console.log(arr2);

        //replace 方法: 根据正则替换字符
        var str = "www.baidu.com";
        var str1 = str.replace(/baidu/,"hello");
        console.log(str1);
    </script>
</body>
</html>

2.正则方法

(1)exec:在目标字符串中执行一次
(2)test:测试当前正则是否能匹配目标字符串

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //exec 方法:返回目标字符串第一次出现的位置
        //无论有没有全局修饰符,都只会找到第一次出现的位置
        var str = /abc/;
        console.log(str.exec("aaaabccccbacabc"));

        //test 方法: 返回是否包含在字符串内,包含返回true ,不包含返回false
        console.log(str.test("aaaabccccbacabc"));
    </script>
</body>
</html>

三、正则表达式的组成

由普通字符和特殊字符组成(元字符),普通字符包括大小写字母和数字,特殊字符是() [] {} * ^ $符号等

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //普通字符
        var reg = /abc/;
        console.log(reg.test("afhgfhabchhtd"));

        //特殊字符
        var a = /a\*/;
        console.log(a.test("rfsh*ssag"));
        var reg1 = /\n/;
        var str = `afgftexdxv
        adsdgfkukuyu`;
        console.log(reg1.test(str));
    </script>
</body>
</html>

1.字符集

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //字符集 在[]内的字符  只要有一个符合就可以匹配
        //简单类:简单的字符串在字符集内
        var reg = /[abc]/;
        console.log(reg.test("hhbkk"));

        //范围类:在一定范围内的字符集,只要有一个在范围内的字符就可以匹配 0-9 A-Z a-z
        var reg1 = /[0-9]/;
        console.log(reg1.test("sakhfjd"));

        //负向类:只要不是字符集中的字符出现,就可以匹配成功
        var reg2 = /[^a-z]/;
        console.log(reg2.test("adsfdfgd3"));

        //组合类: 上面类的组合,只要出现一个字符符合就匹配成功
        //特殊情况: 可以进行缩写,但是必须按照0-9 A-Z a-z 这个顺序的字符集才可以进行缩写,否则不可以进行缩写
        var reg3 = /[0-9a-z]/;
        var reg4 = /[0-z]/;
        console.log(reg3.test("afssdgh"));
        console.log(reg4.test("A"));
        

    </script>
</body>
</html>

2.修饰符

g修饰符:可以实现全局查找
i修饰符:可以实现对于字母的大小写不敏感

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //修饰符:g    i
        //g修饰符 : 可以实现全局查找
        var reg = /a+/g;
        var str = "hhgokfaaawegdgaa";
        console.log(str.match(reg));

        //i修饰符 : 字母大小写不敏感
        var str1 = "egfhljsadgaaaaahaa";
        var reg1 = /A+/ig;
        console.log(str1.match(reg1));
    </script>
</body>
</html>

3.边界

^边界符号,限制字符串的开头,此符号后面的字符串必须在匹配的字符串开头。
$边界符号,限制字符串的结尾,此符号前面的字符串必须在匹配的字符串的结尾。
两种边界符号可以同时限制,既限制开头又限制结尾。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //边界符号
        //^边界符号:限制开头
        var str = "hello javascript";
        console.log(/^hello/.test(str));
        console.log(/^helllo/.test(str));
        //$边界符号:限制结尾
        console.log(/script$/.test(str));
        console.log(/helllo$/.test(str));
        //两种边界都限制,既限制开头又限制结尾
        console.log(/^hello\s+javascript$/.test(str));
    </script>
</body>
</html>

4.预定义类

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //非回车非换行
        console.log(/^.+$/.test("assfdgfhgh"));
        console.log(/^.+$/.test(`csdks
        dhfgjg`));

        //\d 数字字符 \D非数字字符
        console.log(/^\d+$/.test("121314546"));
        console.log(/^\d+$/.test("12224v23"));
        console.log(/^\D+$/.test("SFSFDFGJ"));
        console.log(/^\D+$/.test("DSDSF4FD"));

        //\s 空白字符 \S非空白字符
        console.log(/^\s+$/.test("      "));
        console.log(/^\S+$/.test("1222 4v23"));

        //\w 单词字符 \W非单词字符
        console.log(/^\w+$/.test("1213145sfdg_46"));
        console.log(/^\W+$/.test("*&8"));
    </script>
</body>
</html>

5.量词

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //{n} 硬性量词  只能连续出现n次
        var reg = /^\d{5}$/;
        console.log(reg.test("12345"));
        console.log(reg.test("1234"));
        console.log(reg.test("123456"));

        //{n,m} 软性量词  出现在n到m之间就可以,但是不能小于n不能大于m
        var reg = /^\d{6,8}$/;
        console.log(reg.test("12345"));
        console.log(reg.test("123456"));
        console.log(reg.test("1234567"));
        console.log(reg.test("123456789"));

        //{n,} 软性量词  至少出现n次,可以大于n但不能小于n
        var reg = /^\d{6,}$/;
        console.log(reg.test("12345"));
        console.log(reg.test("123456"));
        console.log(reg.test("1234567"));

        //? 相当于{0,1} 软性量词  只能出现0次或者一次
        var reg = /^\d?$/;
        console.log(reg.test("1"));
        console.log(reg.test(""));
        console.log(reg.test("123456"));

        //* 相当于{0,1} 软性量词  可以出现零次或者任意次
        var reg = /^\d*$/;
        console.log(reg.test("1"));
        console.log(reg.test(""));
        console.log(reg.test("123456"));

        //+ 相当于{0,1} 软性量词  至少出现一次
        var reg = /^\d+$/;
        console.log(reg.test("1"));
        console.log(reg.test(""));
        console.log(reg.test("123456"));
    </script>
</body>
</html>

6.分组、或操作符

用()小括号来进行分组,将括号中的内容作为一个整体出现进行匹配。
|或操作符可以进行选择匹配,只要满足|符号两边的任意一个就可以,通常与()进行搭配使用。
下面看代码,体会分组和或操作符

    <script>
        //分组 ()
        var reg = /^(bye){2}$/;
        console.log(reg.test("byebye"));
        console.log(reg.test("bye"));
    </script>
    <script>
        //或操作符 | 
        //不与()搭配使用时,表示要么以ab开头,要么以cd结尾
        var reg = /^ab|cd$/;
        console.log(reg.test("abfgdh"));
        console.log(reg.test("fgdh"));
        console.log(reg.test("gdhcd"));

        //与()搭配使用时,表示括号内的作为一个整体,要么以ab作为开头和结尾,要么以cd作为开头和结尾。
        var reg = /^(ab|cd)$/;
        console.log(reg.test("ab"));
        console.log(reg.test("abcd"));
        console.log(reg.test("cd"));
    </script>

7.分组的反向引用

分组()里的内容可以进行编号,从1开始编号,将编号的内容进行引用。
在正则表达式内引用:\1
在正则表达式外引用:$1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //分组()可以进行编号,从序号1开始进行编号
        //在正则表达式中进行编号引用 \1
        console.log(/^(bye)\1$/.test("byebye"));
        console.log(/^(bye)\1$/.test("byelie"));
        //在外面进行引用 $1
        var str = "123*456";
        console.log(str.replace(/^([0-9]{3})\*([0-9]{3})$/,"$2*$1"));
        //第二个参数也可以用函数来表示
        str = str.replace(/^([0-9]{3})\*([0-9]{3})$/,function (match,$1,$2) {
            return $1 * 3 + "/" + $2 * 2;
        });
        console.log(str);
    </script>
</body>
</html>

8.中文匹配

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //中文匹配 \u4e00-\u9fa5
        console.log(/^[\u4e00-\u9fa5]+$/.test("智能"));
        console.log(/^[\u4e00-\u9fa5]+$/.test("智能phone"));
    </script>
</body>
</html>

总结

正则表达式就学习到这里啦,后期使用正则表达式可以通过上面学习的字符集等灵活运用。每天坚持学习前端~
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值