正则表达式学习(js)
概览
先拿数字举例
符号 | 含义 |
---|---|
\d | 数字 |
\d? | 0个或1个数字 |
\d+ | 1个或多个数字 |
\d* | 0个或多个数字 |
\d{3} | 3个数字 |
\d{3,5} | 3个到5个数字 |
几个常用的例子
-
单词边界\b
比如我们就像匹配单词
is
,像qishi
这样的不要匹配,我们就需要\bis\b
-
点.表示任意字符
如果我们就需要匹配点.,那我们就需要转义
\.
-
匹配
//
网址中经常有
//
,要匹配这个,也需要转义\/\/
-
分组()
分组之后,我们可以提取其中的内容
-
或者[]
在匹配日期中,
[-/]
,就可以要么匹配-
,要么匹配/
-
开头、结尾
^表示以什么开始,$表示以什么结束
正则对象
创建一个正则对象
var reg = new RegExp('\\bis\\b','g')
\\
,第一个是为了转义,第二个是配合后面的\b
修饰符
- g: global 表示全文搜索
- i: ignore case 忽略大小写。默认大小写敏感
- m:multiple lines 多行搜索
多行匹配就是让后面的行同样适用于第一行的规则。
没加换行修饰符
![](https://img.haomeiwen.com/i422094/a73e8b27dfb0be51.png)
第二行,第三行的都没有匹配到。
如果我们加上换行修饰符
![](https://img.haomeiwen.com/i422094/23ccaa0e96549f7a.png)
元字符
正则表达式由两种基本字符组成,一类是原义文本字符,写什么就匹配什么,我们看到的就是要匹配的。第二类就是元字符,元字符就是在正则表达式中有特殊含义的非字母字符。
![](https://img.haomeiwen.com/i422094/463443030e6cc6bd.png)
字符类
![](https://img.haomeiwen.com/i422094/59a483e7f22a55de.png)
我们使用[]
构造了一类字符,这一类字符中,可以是abc中的任意一个。
字符类取反
![](https://img.haomeiwen.com/i422094/1045552de3854f01.png)
范围类
如果我们要需要一个类,包括数字从5到9,我们需要这样[5 6 7 8 9]
,如果数字多的话,会很麻烦
所以就需要范围类了
![](https://img.haomeiwen.com/i422094/595512eed6a0cf16.png)
连写
[a-zA-Z],就把大小写都包括了。
如果我们不光包括大小写,还需要包括-
[a-zA-Z-],后面加一个-
就可以了。
js预定义类和边界
上一节中,看到我们可以自定义类,这样已经方便了我们书写,但是还不够,为此,正则表达式还给我们提供了预定义类来匹配常见的字符类。
![](https://img.haomeiwen.com/i422094/8020d1d606440f54.png)
![](https://img.haomeiwen.com/i422094/98a681b50b95f746.png)
我们可以自己构造:
ab[0-9][^\r\n]
也可以使用正则的预定义类
ab\d.
边界
![](https://img.haomeiwen.com/i422094/dcb5181896235361.png)
举例
![](https://img.haomeiwen.com/i422094/79e496ba73c10c19.png)
量词
我们希望匹配一个连续出现20次的数字的字符串
![](https://img.haomeiwen.com/i422094/446e7bc3d67fd311.png)
好麻烦
![](https://img.haomeiwen.com/i422094/4767f9d50315ba3c.png)
贪婪模式和非贪婪模式
![](https://img.haomeiwen.com/i422094/5045f2f20ac27bad.png)
这个会匹配多少?
默认是贪婪模式,会都匹配。
如果我们想让它尽可能少的匹配,我们就设置为非贪婪模式。
![](https://img.haomeiwen.com/i422094/4b8fd7c0271e82e3.png)
举例:
![](https://img.haomeiwen.com/i422094/14c37e86e7c94229.png)
分组
我们有这样的场景,匹配字符串Byron
出现三次的场景。
学习了量词之后,我们可以这样:Byron{3}
但是这并不是我们需要的,因为它代表的是n
出现三次。
![](https://img.haomeiwen.com/i422094/3cba30a85a25d820.png)
或
![](https://img.haomeiwen.com/i422094/9dfa38a6090f79c2.png)
上面的例子,如果我们只是想把或作用on
或Ca
,我们可以这样
![](https://img.haomeiwen.com/i422094/da513b5028a88d3c.png)
反向引用
场景:
![](https://img.haomeiwen.com/i422094/55c8ab9917639417.png)
不光是
-
变成了/
,日期的顺序也变了。
我们要替换的内容还在字符串本身里面,就相当于变量的概念了。
![](https://img.haomeiwen.com/i422094/b1d4f60ae2ef83af.png)
note:如果没有分组的话,$就表示原义了。
忽略分组
![](https://img.haomeiwen.com/i422094/dbaa661b2ec79f85.png)
前瞻和后顾
![](https://img.haomeiwen.com/i422094/1d82cc25062e60dd.png)
![](https://img.haomeiwen.com/i422094/e0534667d4497f0d.png)
举例
![](https://img.haomeiwen.com/i422094/c74e19287dabf807.png)
![](https://img.haomeiwen.com/i422094/7a199dcb2f2afc0c.png)
这里的(?=\d)
不是正则部分,它是类型断言部分。
网友评论