如何在RegEx中使用反引号替换标记代码缩进?



我有一堆内容,看起来像:

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标志修复所有代码块行

相关内容

  • 没有找到相关文章

最新更新