上一节我们学习了JS中的事件,本节我们将学习JS中的正则表达式(Regex)。那什么是正则表达式(Regex)呢?简单来说,正则表达式(Regex)是一种用于匹配字符串中字符组合的模式。在JS 中,正则表达式也是一个对象,主要用于文本的搜索和替换、数据验证以及字符串提取。
1. 正则表达式(Regex)的语法:
/正则表达式(Regex)模式/修饰符
正则表达式(Regex)是一个变量,我们可以这样创建一个正则表达式(Regex):
1. 1字面量创建:
/*正则表达式(Regex)*/ let regex=/Dotcpp/i //正则表达式(Regex)通常由两个'/'所包裹,第二个'/'后可选跟一个修饰符,修饰符的作用是更改正则表达式的匹配模式,比如这里的i的作用是不区分大小写
1. 2 构造函数创建:
/*正则表达式(Regex)*/
const regex=RegExp('Dotcpp','i') //这里第一个字符串是正则表达式模式,第二个字符串是修饰符,修饰符的作用是更改正则表达式的匹配模式,比如这里的i的作用是不区分大小写2. 正则表达式模式:
我们要不就是使用普通字符,包括所有的字母和数字,进行一一对应的默认匹配;要不就是使用元字符,元字符相对灵活,能够极大地提高查找效率和查找灵活性!
2.1元字符,又可分为边界符、量词和字符类。
2.1.1——边界符:
| 符号 | 功能 |
|---|---|
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
\b | 匹配单词边界(单词的开始或结束) |
\B | 匹配非单词边界 |
2.1.2——量词:
| 符号 | 功能 |
|---|---|
* | 匹配前一个元素0次或多次 |
+ | 匹配前一个元素1次或多次 |
? | 匹配前一个元素0次或1次 |
{n} | 匹配前一个元素恰好n次 |
{n,} | 匹配前一个元素至少n次 |
{n,m} | 匹配前一个元素n到m次 |
2.1.3——字符类:
| 符号 | 功能 |
|---|---|
. | 匹配除换行符外的任何单个字符 |
\d | 匹配任何数字字符(等价于[0-9]) |
\D | 匹配任何非数字字符(等价于[^0-9]) |
\w | 匹配任何字母、数字、下划线(等价于[a-zA-Z0-9_]) |
\W | 匹配任何非字母、数字、下划线字符 |
\s | 匹配任何空白字符(空格、制表符、换行符等) |
\S | 匹配任何非空白字符 |
[abc] | 匹配方括号内的任意一个字符 |
[^abc] | 匹配不在方括号内的任意字符 |
[a-z] | 匹配指定范围内的任意字符 |
2.2如何使用这些元字符呢?
2.2.1边界符'^'从字符串开头开始找:
const s = 'Dotcpp 编程' /*'^'表示从头找*/ const regex=/^Dotcpp/ console.log(regex.test(s));//true
2.2.2量词'*'匹配'*'前的字符有0个或多个:
/*'*'表示有0个或多个字符(该字符指模式中*前的一个字符)*/
const regex=/Dotc*pp/
console.log(regex.test('Dotpp'));//true
console.log(regex.test('Dotcpp'));//true
console.log(regex.test('Dotcccpp'));//true2.2.3字符类[]表示指定范围内的任意字符:
/*[]字符类表示[]内的任意字符都满足*/
const regex = /[Dd]otcpp/
console.log("Dotcpp:", regex.test("Dotcpp")); // true
console.log("dotcpp:", regex.test("dotcpp")); // true
console.log("Potcpp:", regex.test("Potcpp")); // false3.正则表达式的修饰符:
| 修饰符 | 功能 |
|---|---|
i | 忽略大小写(case-Insensitive),使匹配不区分大小写 |
g | 全局匹配(Global),查找所有匹配项而不是在第一个匹配后停止 |
m | 多行模式(Multiline),使 ^ 和 $ 匹配每行的开头和结尾 |
u | Unicode 模式(Unicode),正确处理 Unicode 字符特别是四字节的 UTF-16 编码 |
y | 粘性匹配(Sticky),从 lastIndex 指定位置开始匹配且必须从该位置匹配成功 |
s | 点号全部匹配(dotAll),使 . 元字符匹配包括换行符在内的所有字符 |
3.1 比如我们想要在“DOTCPP”中查找“Dotcpp”,如果添加修饰符i则能成功查找;未添加则默认一一对应,则返回false:
const regex = /Dotcpp/i
console.log(regex.test("DOTCPP"));//true
regex=/Dotcpp/
console.log(regex.test("DOTCPP"));//false4. 正则表达式的方法:
| 方法 | 功能 |
|---|---|
test() | 测试字符串是否匹配正则表达式,返回布尔值 |
exec() | 执行搜索匹配,返回匹配结果的详细信息数组 |
4.1 比如此时我们使用test()方法检测字符串“dotcpp.com”里有没有“Dotcpp”:(这里用到字符类[]修改模式,用于模糊第一个D的大小写)
const regex=/[Dd]otcpp/
console.log(regex.test('dotcpp.com'));//true5.string方法使用正则表达式:
| 方法 | 功能 |
|---|---|
match() | 返回字符串中与正则表达式匹配的结果 |
matchAll() | 返回所有匹配结果的迭代器(ES2020) |
search() | 返回第一个匹配项的索引,未找到返回-1 |
replace() | 替换字符串中与正则表达式匹配的部分 |
split() | 使用正则表达式或固定字符串分割字符串 |
5.1 比如此时我们使用match()在“dotcpp.com”字符串里找正则表达式“Dotcpp”:
/*返回数组对象:['dotcpp', index: 0, input: 'dotcpp.com', groups: undefined]*/
console.log('dotcpp.com'.match(/[Dd]otcpp/));总结:本节主要详细介绍了正则表达式及其使用方法,读者需要认真学习,以便在工作和学习中能够快速解决字符串匹配问题。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程