(正则表达式知识点) 通过leetcode学习正则表达式

845 阅读3分钟

前言

这里是通过leetcode学习正则表达式系列教程的前置知识部分--正则表达式知识,大家可以和参照表对照着看哦。

通过浏览器一边看一边学习

其实,我们的浏览器就是一个可以运行javascript的平台。因此,我们可以在浏览器中直接运行我们的示例哦。具体操作方法:如何在浏览器中运行javascript(todo)

正则表达式对象

在javascript中,正则表达式是一种原始类型,和number,string,array一样哦。(如果对javascript不熟悉可以参考我写的javascript基础教程(todo)哦)

javascript中正则表达式有两种构造方法:

  1. 第一种是字面量法
// 是斜线不是反斜线
var re = /ab+c/
  1. 第二种是调用构造参数法
var re = new RegExp("ab+c")

转义符\

大家如果已经接触过编程语言,那就一定接触过转义符了吧。javascript中的转义符也是\,如如果你想在正则表达式里面表达\符号,就需要\\这样写,因为转义符也需要被转义。

note: 转义符后面跟随单词的大小写。在正则表达式中,如果后面单词是小写,表示匹配这个范围;而大写表示取对应小写集合的补集。例如下面的\b表示要匹配边界,而\B表示匹配非边界

\b \B

\b用来匹配一个单词的边界。

使用"moon"来举例:

  1. /\bm/匹配"moon"中的'm'
  2. /oo\b/不能匹配"moon"中的'oo',因为'oo'后面接着'n'
  3. /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}

  1. {n}代表前面的一个字符出现了n次
  2. {n,}代表前面的一个字符至少出现了n次
  3. {n,m}代表前面的一个字符出现次数在n到m之间(闭区间)

[xyz] [^xyz]

中括号包裹起来的是字符集合,可以匹配括号里面的任意字符。并且可以使用dash(短横线)指定字符范围,如上面\d的例子[0-9]\w的[A-Za-z0-9_],短横线在上面的例子只是指定范围,并没有将短横线也包括在字符集合里面。如果想要把短横线包括在字符集合中,需要把短横线放在字符集合的最前面,例如:[-0-9]可以匹配短横线和数字。中括号里面也可以放转义符,例如[\da-zA-Z]\w是一样的效果。

^在中括号内和在中括号外效果是不一样的,我们在这里先说中括号内的:中括号内放在最前面,代表着对原来的集合取补集。例如:[^\d]\D是一样的。

^ $

^代表句子开头

$代表句子结尾

* + ?

  1. *{0,}
  2. +{1,}
  3. ?{0,1}

.

代表着任意字符

(x) (?:x)

将括号里面的内容作为一个整体,如果后面跟着+*?等关键词,就不只是作用与前面的那个字符,而是作用于括号内的。

x(?=y) (?<=y)x x(?!y) (?<!y)x

断言

x|y

匹配x或者y