正则表达式01

140 阅读5分钟

1 . RegExp(正则表达式)

正则表达式(RegExp) 是Regular Expression缩写,是用于查找符合某些规则的字符串的工具。
正则表达式是一个描述字符模式的对象,当检索某个文本时,可以使用一种模式来描述要检索的内容,RegExp 就是这种模式。

1 . 1 正则的创建:

1 . 1 . 1 构造函数:

var reg1 = new RegExp('a' , 'i')

1 . 1 . 2 字面量创建:

var reg2 = /a/i

上面两种创建方式所表达的内容是一致的,都是匹配字符串中的’a’,并且是忽略大小写的。

1 . 2 正则对象的属性和方法:

上面我们仅仅只是得到一个正则对象,还不能做任何事情,例如对字符串的校验等。

1 . 2 . 1 正则对象的属性:

  • global:全局的,对应修饰符g
  • ignoreCase:忽略大小写,对应修饰符i
  • multiline:多行,对应修饰符m
  • lastIndex:下一次匹配的字符位置

1 . 2 . 2 正则对象的属性:

  • test():测试方法,用于测试一个字符串是否符合正则表达式对象所指定的模式规则,返回true或false
  • exec():搜索方法,用于在字符串中查找符合正则表达式对象所指定的模式的子字符串,返回找到的结果,若找不到则返回null

1 . 3 匹配模式 pattern :

正则表达式的基本组成元素可以分为:字符和元字符

单个字符:

  • 最简单的正则表达式可以由简单的数字和字母组成,没有特殊的语义,纯粹就是一一对应的关系。如想在'apple'这个单词里找到‘a'这个字符,就直接用/a/这个正则就可以了。
  • 想要匹配特殊字符的话,就得请出我们第一个元字符**\**, 它是转义字符字符,顾名思义,就是让其后续的字符失去其本来的含义。举个例子:
    • 我想匹配*这个符号,由于*这个符号本身是个特殊字符,所以我要利用转义元字符``来让它失去其本来的含义,即 /\*/.
  • 如果本来这个字符不是特殊字符,使用转义符号就会让它拥有特殊的含义。我们常常需要匹配一些特殊字符,比如空格,制表符,回车,换行等, 而这些就需要我们使用转义字符来匹配。
特殊字符正则表达式记忆方式
换行符\nnew line
换页符\fform feed
回车符\rreturn
空白符\sspace
制表符\ttab
垂直制表符\vvertical tab
回退符[\b]backspace,之所以使用[]符号是避免和\b重复

多个字符:

单个字符的映射关系是一对一的,即正则表达式的被用来筛选匹配的字符只有一个。而这显然是不够的,只要引入集合区间和通配符的方式就可以实现一对多的匹配了。

匹配区间正则表达式记忆方式
除了换行符之外的任何字符.句号,除了句子结束符
单个数字, [0-9]\ddigit
除了[0-9]\Dnot digit
包括下划线在内的单个字符,[A-Za-z0-9_]\wword
非单字字符\Wnot word
匹配空白字符,包括空格、制表符、换页符和换行符\sspace
匹配非空白字符\Snot space

循环与重复:

 就该介绍如何同时匹配多个字符。要实现多个字符的匹配我们只要多次循环,重复使用我们的之前的正则规则就可以了。那么根据循环次数的多与少,我们可以分为0次,1次,多次,特定次。

0 | 1 ?

元字符?代表了匹配一个字符或0个字符。设想一下,如果你要匹配colorcolour这两个单词,就需要同时保证u这个字符是否出现都能被匹配到。所以你的正则表达式应该是这样的:/colou?r/

>= 0 *

元字符*用来表示匹配0个字符或无数个字符。通常用来过滤某些可有可无的字符串。

>= 1 +

元字符+适用于要匹配同个字符出现1次或多次的情况。

特定次数:

在某些情况下,我们需要匹配特定的重复次数,元字符{}用来给重复匹配设置精确的区间范围。如'a'我想匹配3次,那么我就使用/a{3}/这个正则,或者说'a'我想匹配至少两次就是用/a{2,}/这个正则。

  • {x}: x次
  • {min, max}: 介于min次到max次之间
  • {min, }: 至少min次
  • {0, max}: 至多max次

位置边界:

上面我们把字符的匹配都介绍完了,接着我们还需要位置边界的匹配。在长文本字符串查找过程中,我们常常需要限制查询的位置。比如我只想在单词的开头结尾查找。

边界和标志正则表达式记忆方式
单词边界\bboundary
非单词边界\Bnot boundary
字符串开头头尖尖那么大个
字符串结尾$终结者,美国科幻电影,美元符$
多行模式m标志multiple of lines
忽略大小写i标志ignore case, case-insensitive
全局模式g标志global

上述为基础用法,更高级的子表达式见[ ](正则表达式不要背 - 掘金 (juejin.cn))