文章目录
前言
在前端中学习正则表达式是非常有必要的,在实际开发中会经常使用正则表达式。
正则表达式:(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>
总结
正则表达式就学习到这里啦,后期使用正则表达式可以通过上面学习的字符集等灵活运用。每天坚持学习前端~

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

被折叠的 条评论
为什么被折叠?



