前言
这里是通过leetcode学习正则表达式系列教程的前置知识部分--正则表达式知识,大家可以和参照表对照着看哦。
通过浏览器一边看一边学习
其实,我们的浏览器就是一个可以运行javascript的平台。因此,我们可以在浏览器中直接运行我们的示例哦。具体操作方法:如何在浏览器中运行javascript(todo)
正则表达式对象
在javascript中,正则表达式是一种原始类型,和number,string,array一样哦。(如果对javascript不熟悉可以参考我写的javascript基础教程(todo)哦)
javascript中正则表达式有两种构造方法:
- 第一种是字面量法
// 是斜线不是反斜线
var re = /ab+c/
- 第二种是调用构造参数法
var re = new RegExp("ab+c")
转义符\
大家如果已经接触过编程语言,那就一定接触过转义符了吧。javascript中的转义符也是\,如如果你想在正则表达式里面表达\符号,就需要\\这样写,因为转义符也需要被转义。
note: 转义符后面跟随单词的大小写。在正则表达式中,如果后面单词是小写,表示要匹配这个范围;而大写表示取对应小写集合的补集。例如下面的
\b表示要匹配边界,而\B表示匹配非边界
\b \B
\b用来匹配一个单词的边界。
使用"moon"来举例:
/\bm/匹配"moon"中的'm'/oo\b/不能匹配"moon"中的'oo',因为'oo'后面接着'n'/oon\b/可以匹配moon中的'oon',因为n是moon的边界
\d \D
d 的意思是digital(数字)
\d表示匹配一个数字,等价与[0-9]([]后面会说到)
\D表示匹配一个非数字,等价与[^0-9]
\s \S
s 的意思是space(空格)
\s表示匹配一个空白字符,包括空格、制表符、换页符、换行符。等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。
\S表示匹配一个非空白字符。
\w \W
w 的意思是word(单词)
\s表示匹配一个单字字符。包括字母数字下划线。等价于[A-Za-z0-9_]
\S表示匹配一个非单字字符。
\n \cX \f \r \t \v
下面的转义符在正则表达式中使用的不多(个人观点),其中前两种使用较多。
| 字符 | 含义 |
|---|---|
\n |
代表换行符 |
\t |
水平制表符 |
\v |
垂直制表符 |
\f |
换页符 |
\r |
回车符 |
{n} {n,} {n,m}
{n}代表前面的一个字符出现了n次{n,}代表前面的一个字符至少出现了n次{n,m}代表前面的一个字符出现次数在n到m之间(闭区间)
[xyz] [^xyz]
中括号包裹起来的是字符集合,可以匹配括号里面的任意字符。并且可以使用dash(短横线)指定字符范围,如上面\d的例子[0-9];\w的[A-Za-z0-9_],短横线在上面的例子只是指定范围,并没有将短横线也包括在字符集合里面。如果想要把短横线包括在字符集合中,需要把短横线放在字符集合的最前面,例如:[-0-9]可以匹配短横线和数字。中括号里面也可以放转义符,例如[\da-zA-Z]和\w是一样的效果。
^在中括号内和在中括号外效果是不一样的,我们在这里先说中括号内的:中括号内放在最前面,代表着对原来的集合取补集。例如:[^\d]同\D是一样的。
^ $
^代表句子开头
$代表句子结尾
* + ?
*同{0,}+同{1,}?同{0,1}
.
代表着任意字符
(x) (?:x)
将括号里面的内容作为一个整体,如果后面跟着+*?等关键词,就不只是作用与前面的那个字符,而是作用于括号内的。
x(?=y) (?<=y)x x(?!y) (?<!y)x
断言
x|y
匹配x或者y