正则表达式的定义
正则表达式(regular expression)是一个描述字符模式的对象,简单点来讲就是通过正则表达式规定的模式,从一堆字符串中,找到与该模式匹配的字符串,并可以完成检索或字符串替换的功能。
来举个例子,让大家更形象地理解正则表达式的作用。
你去买苹果,老板给你随便拿了几个,但你觉得他给你挑的苹果不好,于是你想从中拿掉一些不好的苹果,再去挑一些好的苹果,在选之前,你先想好自己挑选苹果的标准,比如苹果的纹路要多 、苹果要很红 、苹果不能太大等等,然后再根据你自己定的标准去这么多苹果里挑选到完全符合你标准的苹果放进自己的袋子里,或者是替换掉袋子里你觉得不好的苹果。
希望你们能对正则表达式有个初步的印象。
正则表达式的使用
在JavaScript中,正则表达式用RegExp对象表示,我们可以通过两种方式创建一个正则表达式对象:
- RegExp直接量
- new RegExp()
RegExp直接量
let pattern = /javascript/
这样双正斜杠包裹一个匹配模式的写法就是RegExp直接量,这种方法其实是new RegExp()的一种能语法糖的写法。这一部分我们都用RegExp直接量的方法来讲解,在后面我们会介绍 new RegExp() 的用法
正则表达式初体验
接下来看一个例子,来初次体验一下正则表达式的使用
//RegExp直接量 创建一个字符串的匹配标准let pattern = /javascript/ let str = "I love javascript" str.search(pattern) //返回 7
我来讲一下这段代码,首先我们通过两个正斜杠//
创建了一个正则表达式对象,然后将我们要匹配的字符串放到这两个斜杠中,我们例子中就是将javascript放到两个斜杠中,意思就是我们的匹配标准就是:要匹配到javascript这段字符串。然后我们调用了一个检索的方法search(),这个方法需要传入一个正则表达式对象为参数,根据这个参数去字符串中匹配相应的字符串,如果匹配到了,则返回第一个与之匹配的字符的索引值;若没匹配到,返回-1。例子中,变量str中有一段字符串为javascript,所以匹配成功,并返回javascript的开头字母的索引值,为7
深入了解正则表达式
刚才我们体验了一下最简单的正则表达式去匹配字符串。在上一个例子中,我们将javascript作为标准去匹配,其实大多数的字符都是按照字面含义去匹配的,意思就是你输入什么字符,就去匹配什么字符,比如/python/
就是去字符串中匹配 python
字符串 、/123/
就是去匹配 123
字符串
但是在正则表达式中,\
反斜杠有特殊的作用,在一些字符前面加一个反斜杠,能起到转义的作用。例如 /n/
是匹配字符串 n
的,但是/\n/
中,n的前面加了一个反斜杠,就将其转义了,这个匹配模式的意思就是去匹配换行符,下面列出一些其他的转义字符
字符 |
匹配 |
字母和数字字符 | 自身 |
\o | NUL 字符(\u0000) |
\t | 制表符(\u0009) |
\n | 换行符(\u000A) |
\v | 垂直制表符(\u000B) |
\f | 换页符(\u000C) |
\r | 回车符(\u000D) |
在正则表达式中,许多标点符号都具有特殊的含义,它们是:^ $ . * + ? = ! : | \ / ( ) [ ] { }
,当我们想要匹配这些字符时,也需要在它们前面加上反斜杠 \
,例如
/*--------------不对小括号进行转义----------------*/let pattern = /you(kimy)/let str = "I love you(kimy)" str.search(pattern) //返回 -1 表示未匹配到相应字符 /*--------------对小括号进行转义-----------------*/let pattern = /you\(kimy\)/let str = "I love you(kimy)" str.search(pattern) //返回 7 表示匹配成功
为什么这些标点字符需要进行特殊的转义呢?因为它们有别的用处,我们接下来会慢慢介绍他们的用处
字符类
将直接量字符单独放在方括号里就组成了一个字符类,一个字符类可以匹配它所包含的任意字符。例如/[abcd]/
就是匹配到 a
、b
、c
、d
四个字符中的任意一个即为匹配成功。如果在方括号里最前面加上一个 ^
符号,则表示为,只要匹配到一个不是方括号里的字符的字符串即为匹配成功,例如 /[^abc]/
就是匹配到不是 a
、b
、c
三个字符中的任意一个即为匹配成功。字符类还可以使用 -
来表示字符的一个范围,例如 /[a-zA-Z0-9]/
表示匹配到任意一个大小写字母或者数字都为匹配成功。
在正则表达式中,还给出了一些特殊字符的转义,我们来看下列的表格
字符 |
匹配 |
[…] | 方括号内的任意一个字符 |
[^…] | 不在方括号内的任意一个字符 |
. | 除了换行符和其他Unicode行终止符之外的任意字符 |
\w | 相当于[a-zA-Z0-9] |
\W | 相当于[^a-zA-Z0-9] |
\s | 任何Unicode空白符 |
\S | 任何非Unicode空白符 |
\d |
任何非Unicode空白符 |
\D | 任何非数字,相当于[^0-9] |
[\b] | 退格直接量 |
我们来选取表格中的 \d
来举个例子
let pattern = /python\d/let str = "I love python3" str.search(pattern) //返回 7
我们设置的匹配模式是 /python\d/
,表示匹配到一个字符串为python并且后面紧跟一个任意数字即可,所以成功匹配到 str 中的python3
字符串
结束语
第一篇对于 JavaScript正则表达式的讲解就先到这里,明天后天会继续更新第二篇 、第三篇,并且我会在之后的文章上放上前几篇的文章链接,方便大家观看,希望大家持续关注,点个关注,不迷路