前言
这里是通过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