前端

1. 匹配规则

1.1. g全局匹配

如果没有g修饰, 则只会匹配第一个匹配的内容 如果又g修饰, 则会匹配所有匹配的内容

1.2. m多行匹配

多行模式

  1. 如果没有m, 则对应文本始终被当成一整个搜索对象,
    1. 即只有一个开头和结尾
  2. 如果有m修饰, 则对应文本按换行符拆分成多个搜索对象, 各搜索对象独立
    1. 即该文本有多个开头和结尾, 每个换行符左边为结尾, 右边为开头

2. 定位符

2.1. ^$

child::正则表达式 首尾符

2.2. \b 单词边界

4.2.2.1. 作用:匹配单词边界

单词边界: '会在左右两边产生单词边界 空格也会在左右两边产生单词边界

4.2.2.2. 实例:

https://regex101.com/r/Wg5ZpZ/1

2.3. \B非单词边界

实例:

比如Code\B可以匹配HelloCodeSheep中的Code,不能匹配HelloCode中的Code

2.4. ?! ?= ?<! ?<=前后断言

其中?!常用于构造==非集==

说明:

  1. Javascript中, 断言是支持不定长的! 不定长-变长-长度不固定-长度可变

4.2.3.1. 实例

  1. exp1(?=exp2): 匹配包含exp1子字符串的字符串, 且该字符串必须包含exp1exp2子字符串
    1. 这个例子是用来说明下面的例子, exp1exp3可以为空, 或通配符
  2. exp1(?=exp2)exp3:匹配包含exp1exp3子字符串的字符串,且该字符串必须包含exp1exp2exp3子字符串 右边断言
    1. exp1不能为空, 而exp3可以为空
    2. 实际使用中, 通常exp1exp3为通配符
  3. exp3(?<=exp2)exp1:匹配包含exp3exp1子字符串的字符串,且该字符串必须包含exp3exp2exp1子字符串 左边断言
    1. exp1不能为空, 而exp3可以为空
    2. 实际使用中, 通常exp1exp3为通配符
  4. exp1(?!exp2)exp3:匹配包含exp1exp3子字符串的字符串,且该字符串不含exp1exp2exp3子字符串 右边非断言 右边排除
    1. exp1不能为空, 而exp3可以为空
    2. 实际使用中, 通常exp1exp3为通配符
  5. exp3(?<!exp2)exp1:匹配包含exp3exp1子字符串的字符串,且该字符串不含exp3exp2exp1子字符串 左边非断言 左边排除
    1. exp1不能为空, 而exp3可以为空
    2. 实际使用中, 通常exp1exp3为通配符

3. 转义字符:

转移正则中有特殊用意的符号成普通字符 常见要转移的符号有:

\.
\$
\+

4. 不确定占位符:

  1. .表示除了换行符以外的任意一个字符

5. 限定字符和拓展字符:

  1. *
    1. 前面要加一个子字符串(用()括起来的字符串)或一个字符
    2. 作用是表示匹配前面那个子字符串或一个字符大于等于零次
    3. 默认是贪婪模式,会匹配尽可能多次
      1. child::正则表达式的非贪婪模式
  2. +
    1. 前面要加一个子字符串(用()括起来的字符串)或一个字符
    2. 作用是表示匹配前面那个子字符串或一个字符大于等于1
    3. 默认是贪婪模式,会匹配尽可能多次
      1. 如果在后面加上一个?,表示非贪婪模式或最小匹配模式,这时匹配尽可能少次数
  3. ?
    1. 前面要加一个子字符串(用()括起来的字符串)或一个字符
    2. 作用是表示匹配前面那个子字符串或一个字符一次或零次
  4. {}
    1. 语法
      1. 前面要加一个子字符串(用()括起来的字符串)或一个字符
      2. {}里面有这三种写法
        1. {3}
        2. {3,}
        3. {3,5}
    2. 作用
      1. 用来指定明确或更详细的匹配次数(位数)
      2. {3}表示匹配前面的前面那个子字符串或一个字符三次
      3. {3,5}表示表示匹配前面的前面那个子字符串或一个字符三到五次,为闭区间
      4. {3,}表示匹配前面的前面那个子字符串或一个字符三到无穷次
  5. |
    1. 语法
      1. 前面和后面可以接子字符串和一个字符
      2. 也可以什么都不接
    2. 作用
      1. 表示布尔表达式中的,一种逻辑关系

6. 特殊字符的表示:

  1. 换行符: \n

7. 字符集:

7.1. 常用字符集缩写

  1. \w: a-z、A-Z、0-9,以及下划线
  2. \W 匹配任何非字母数字(等价于[^A-Za-z0-9_])。
  3. \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
  4. \S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]
  5. \d 数字。匹配任何数字。
  6. \D 非数字。匹配任何非数字字符。

7.2. 简要描述

字符集[],从匹配的对象来看,表现出来的就是一个字符而已,而至于是什么字符,就是字符集里面指定的字符

7.3. 字符集指定字符的规则

  1. [abc]表示匹配a或b或c 如[a-z]
  2. 字符集中用-可以把-两边的符号(a和z)结合起来,作为一个整体,表示从a到z这些字符集 正则表达式的运算、结合方向是从左向右的,-这个也不例外 如[0-2-4-6]表示匹配从0到2-这个字符从4到6
  3. [^abc] 匹配除a、b和c以外的任意字符。

8. 设置捕获组:

  1. ()括号阔着, 就是一个捕获组了
  2. 捕获组的序号从一从左往右数
  3. child::命名捕获组

9. 获取(引用)捕获组:

9.1. 在正则表达式外获取捕获组结果:

  1. $1获取第一个捕获组中的匹配字符串
    1. 同理$2获取第二个捕获组

9.2. 在正则表达式中获取捕获组结果:

  1. \1获取第一个捕获组中的匹配字符串
    1. 同理\2获取第二个捕获组
    2. 比如(\d)\1可以匹配两个相同的数字,(Code)(Sheep)\1\2则可以匹配CodeSheepCodeSheep
  2. \k<自定义名字> 获取命名捕获组中的匹配字符串

使用正则表达式进行替换

js

child::

$1、$2、...、$99	与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&	            整个匹配项。
$`	            位于匹配子串左侧的文本。
$'	            位于匹配子串右侧的文本。
$$	            表示$这个符号。
指向原始笔记的链接