上一节我们学习了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'));//true

2.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"));   // false


3.正则表达式的修饰符:

修饰符功能
i忽略大小写(case-Insensitive),使匹配不区分大小写
g全局匹配(Global),查找所有匹配项而不是在第一个匹配后停止
m多行模式(Multiline),使 ^ 和 $ 匹配每行的开头和结尾
uUnicode 模式(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"));//false


4. 正则表达式的方法:

方法功能
test()测试字符串是否匹配正则表达式,返回布尔值
exec()执行搜索匹配,返回匹配结果的详细信息数组

4.1 比如此时我们使用test()方法检测字符串“dotcpp.com”里有没有“Dotcpp”:(这里用到字符类[]修改模式,用于模糊第一个D的大小写)

const regex=/[Dd]otcpp/
console.log(regex.test('dotcpp.com'));//true


5.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/));


总结:本节主要详细介绍了正则表达式及其使用方法,读者需要认真学习,以便在工作和学习中能够快速解决字符串匹配问题。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)