1. 匹配规则
1.1. g全局匹配
如果没有g修饰, 则只会匹配第一个匹配的内容 如果又g修饰, 则会匹配所有匹配的内容
1.2. m多行匹配
- 如果没有m, 则对应文本始终被当成一整个搜索对象,
- 即只有一个开头和结尾
- 如果有m修饰, 则对应文本按换行符拆分成多个搜索对象, 各搜索对象独立
- 即该文本有多个开头和结尾, 每个换行符左边为结尾, 右边为开头
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. ?! ?= ?<! ?<=前后断言
其中?!常用于构造==非集==
说明:
- 在Javascript中, 断言是支持不定长的! 不定长-变长-长度不固定-长度可变
4.2.3.1. 实例
exp1(?=exp2): 匹配包含exp1子字符串的字符串, 且该字符串必须包含exp1exp2子字符串- 这个例子是用来说明下面的例子,
exp1或exp3可以为空, 或通配符
- 这个例子是用来说明下面的例子,
exp1(?=exp2)exp3:匹配包含exp1exp3子字符串的字符串,且该字符串必须包含exp1exp2exp3子字符串 右边断言exp1不能为空, 而exp3可以为空- 实际使用中, 通常
exp1或exp3为通配符
exp3(?<=exp2)exp1:匹配包含exp3exp1子字符串的字符串,且该字符串必须包含exp3exp2exp1子字符串 左边断言exp1不能为空, 而exp3可以为空- 实际使用中, 通常
exp1或exp3为通配符
exp1(?!exp2)exp3:匹配包含exp1exp3子字符串的字符串,且该字符串不含exp1exp2exp3子字符串 右边非断言 右边排除exp1不能为空, 而exp3可以为空- 实际使用中, 通常
exp1或exp3为通配符
exp3(?<!exp2)exp1:匹配包含exp3exp1子字符串的字符串,且该字符串不含exp3exp2exp1子字符串 左边非断言 左边排除exp1不能为空, 而exp3可以为空- 实际使用中, 通常
exp1或exp3为通配符
3. 转义字符:
转移正则中有特殊用意的符号成普通字符 常见要转移的符号有:
\.
\$
\+
4. 不确定占位符:
.表示除了换行符以外的任意一个字符
5. 限定字符和拓展字符:
*- 前面要加一个子字符串(用
()括起来的字符串)或一个字符 - 作用是表示匹配前面那个子字符串或一个字符大于等于零次
- 默认是贪婪模式,会匹配尽可能多次
- child::正则表达式的非贪婪模式
- 前面要加一个子字符串(用
+- 前面要加一个子字符串(用
()括起来的字符串)或一个字符 - 作用是表示匹配前面那个子字符串或一个字符大于等于1
- 默认是贪婪模式,会匹配尽可能多次
- 如果在后面加上一个
?,表示非贪婪模式或最小匹配模式,这时匹配尽可能少次数
- 如果在后面加上一个
- 前面要加一个子字符串(用
?- 前面要加一个子字符串(用
()括起来的字符串)或一个字符 - 作用是表示匹配前面那个子字符串或一个字符一次或零次
- 前面要加一个子字符串(用
{}- 语法
- 前面要加一个子字符串(用
()括起来的字符串)或一个字符 {}里面有这三种写法{3}{3,}{3,5}
- 前面要加一个子字符串(用
- 作用
- 用来指定明确或更详细的匹配次数(位数)
{3}表示匹配前面的前面那个子字符串或一个字符三次{3,5}表示表示匹配前面的前面那个子字符串或一个字符三到五次,为闭区间{3,}表示匹配前面的前面那个子字符串或一个字符三到无穷次
- 语法
|- 语法
- 前面和后面可以接子字符串和一个字符
- 也可以什么都不接
- 作用
- 表示布尔表达式中的
或,一种逻辑关系
- 表示布尔表达式中的
- 语法
6. 特殊字符的表示:
- 换行符:
\n
7. 字符集:
7.1. 常用字符集缩写
\w: a-z、A-Z、0-9,以及下划线\W匹配任何非字母数字(等价于[^A-Za-z0-9_])。\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。\S匹配任何非空白字符。等价于[^ \f\n\r\t\v]。\d数字。匹配任何数字。\D非数字。匹配任何非数字字符。
7.2. 简要描述
字符集[],从匹配的对象来看,表现出来的就是一个字符而已,而至于是什么字符,就是字符集里面指定的字符
7.3. 字符集指定字符的规则
[abc]表示匹配a或b或c 如[a-z]- 字符集中用
-可以把-两边的符号(a和z)结合起来,作为一个整体,表示从a到z这些字符集 正则表达式的运算、结合方向是从左向右的,-这个也不例外 如[0-2-4-6]表示匹配从0到2或-这个字符或从4到6 [^abc]匹配除a、b和c以外的任意字符。
8. 设置捕获组:
- 用
()括号阔着, 就是一个捕获组了 - 捕获组的序号从一从左往右数
- child::命名捕获组
9. 获取(引用)捕获组:
9.1. 在正则表达式外获取捕获组结果:
$1获取第一个捕获组中的匹配字符串- 同理
$2获取第二个捕获组
- 同理
9.2. 在正则表达式中获取捕获组结果:
\1获取第一个捕获组中的匹配字符串- 同理
\2获取第二个捕获组 - 比如
(\d)\1可以匹配两个相同的数字,(Code)(Sheep)\1\2则可以匹配CodeSheepCodeSheep
- 同理
\k<自定义名字>获取命名捕获组中的匹配字符串
使用正则表达式进行替换
js
child::
指向原始笔记的链接 $1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 $& 整个匹配项。 $` 位于匹配子串左侧的文本。 $' 位于匹配子串右侧的文本。 $$ 表示$这个符号。