正则表达式学习
基本语法
匹配
.
匹配任意单个字符(除了换行符)\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表格如下:
| 左对齐标题 | 右对齐标题 | 默认对齐标题 | |
我想要把所有的---
都换成:---:
居中的样式,可以使用如下正则表达式:
(\|)\s*:?(-+):?\s* |
替换为:
$1:$2: |
学习:
()
表示分组,与后面的$1
、$2
对应起来,没有分组的在替换的时候就会被丢弃\|
:反斜杠转义|
\s
代表空白字符(空格、制表符、换行等),*
代表匹配前一个字符 0 次或多次:?
:?
代表匹配前一个字符 0 次或 1 次(-+)
:+
代表匹配前一个字符 1 次或多次
匹配所有空白
我有下面这段文本,我想要把前面的空格替换为-
- . 匹配任意单个字符(除了换行符) |
直接^\s+
会匹配到md开头的tag,因此要使用零宽断言来跳过某些样式

使用
^(?!\s*-)\s+ |
学习:
(?!\s*-)
:(?!...)
负向零宽先行断言,A(?!B)
→ 匹配 A,但 A 后面不能是 B
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Diraw的世界!
右侧切换GitHub或邮箱评论
GiscusTwikoo