基本语法
匹配
.
匹配任意单个字符(除了换行符)\d
匹配数字(等价于[0-9]
)\w
匹配字母、数字或下划线(等价于[a-zA-Z0-9_]
)\s
匹配空白字符(空格、制表符、换行等)^
匹配字符串开头$
匹配字符串结尾*
匹配前一个字符 0 次或多次+
匹配前一个字符 1 次或多次?
匹配前一个字符 0 次或 1 次{n}
匹配前一个字符恰好 n 次{n,}
匹配前一个字符至少 n 次{n,m}
匹配前一个字符 n 到 m 次[abc]
匹配 a、b 或 c 中的任意一个(abc)
分组,匹配 abc 并捕获
跳过
A(?!B)
:匹配 A,但 A 后面不能是 B,负向零宽先行断言(?<!B)A
:匹配 A,但 A 前面不能是 B,负向零宽后行断言[^ABC]
:匹配非 A、B、C 的字(?:A|B)\KC
:匹配 C,但前面可以是 A 或 B(\K
会丢弃前面的匹配)A(*SKIP)(*FAIL)|B
:跳过 A,只匹配 B
替换md表格居中
假设我有一个md表格如下:
| 左对齐标题 | 右对齐标题 | 默认对齐标题 |
| ---------- | ---------: | ------------ |
| 单元格A | 单元格B | 单元格C |
| 单元格D | 单元格E | 单元格F |
我想要把所有的---
都换成:---:
居中的样式,可以使用如下正则表达式:
(\|)\s*:?(-+):?\s*
替换为:
$1:$2:
学习:
()
表示分组,与后面的$1
、$2
对应起来,没有分组的在替换的时候就会被丢弃\|
:反斜杠转义|
\s
代表空白字符(空格、制表符、换行等),*
代表匹配前一个字符 0 次或多次:?
:?
代表匹配前一个字符 0 次或 1 次(-+)
:+
代表匹配前一个字符 1 次或多次
匹配所有空白
我有下面这段文本,我想要把前面的空格替换为-
- . 匹配任意单个字符(除了换行符)
- \d 匹配数字(等价于 [0-9])
\w 匹配字母、数字或下划线(等价于 [a-zA-Z0-9_])
\s 匹配空白字符(空格、制表符、换行等)
^ 匹配字符串开头
$ 匹配字符串结尾
* 匹配前一个字符 0 次或多次
+ 匹配前一个字符 1 次或多次
直接^\s+
会匹配到md开头的tag,因此要使用零宽断言来跳过某些样式

使用
^(?!\s*-)\s+
学习:
(?!\s*-)
:(?!...)
负向零宽先行断言,A(?!B)
→ 匹配 A,但 A 后面不能是 B