我有一堆内容,看起来像:
content
test test
testing
hello
content
目标是使用RegEx将其转换为如下形式:
content
```
test test
testing
hello
```
content
就是把缩进的代码块替换成反打号的代码块。
我已经尝试了RegEx表达式:( ((?:S| )*)n)+
与以下替换字符串:
```n$0```n
问题是它不会删除代码块中的一层缩进。
我如何构建一个正则表达式来做到这一点?
还有一个注意事项,使用JavaScript来执行这个正则表达式。
这是一个RegEx101文件,我试图工作:https://regex101.com/r/iMbDly/1
您可以使用嵌套替换。用于代码块的外层一个,用于删除前导空格的嵌套一个:
let input = `content
test test
testing
hello
content`;
let result = input.replace(/(n {4}[^n]*)+/g, function(m) {
return 'n```' + m.replace(/n {4}/g, 'n') + 'n```';
});
console.log(result);
输出:(前导.
加入以逃避SO渲染)
content
.```
test test
testing
hello
.```
content
外部正则表达式/(n {4}[^n]*)+/g
:
(
-捕获组(您可以使用非捕获组(?:...)
)n
-换行符(如果你想在一开始就支持代码块,使用(?:^|n)
代替){4}
-四个空格[^n]*
-其他所有内容在同一行
)+
-捕获组结束,重复1+次- replace是沿匹配文本传递的函数
- 为多个代码块使用
g
标志
内部正则表达式/n {4}/g
:
n
- newline{4}
-四个空格- 用换行符和三个反引号替换
- 使用
g
标志修复所有代码块行