将GFM突出显示的代码块转换为Stack Overflow突出显示的代码块

时间:2018-02-06 04:46:20

标签: regex pcre oniguruma

1。问题

我无法将GFM highlighted code block转换为Stack Overflow highlighted code block

2。实施例

例如,我需要转换:

Do not change this line

```markdown
Sasha great!
    Sasha nice!
She is beautiful, surprise!
```

Do not change this line

为:

Do not change this line

<!-- language: lang-markdown -->

    Sasha great!
        Sasha nice!
    She is beautiful, surprise!

Do not change this line

3。问题

得到突出显示的代码块,我需要在代码块内的每一行的开头添加制表符。我不明白,我怎么做。

4。没帮忙

我的示例正则表达式:

  • 查找

    \`\`\`(.+?)\n((.+?\n)+)\`\`\`
    
  • 替换

    <!-- language: lang-\1 -->\n\n\t\2
    

Demonstration on Regex101

我得到结果:

Do not change this line

<!-- language: lang-markdown -->

    Sasha great!
    Sasha nice!
She is beautiful, surprise!


Do not change this line

仅在代码块内的第一行开头添加制表符号。我该怎么做,在代码块内的每一行的开头添加制表符号?

1 个答案:

答案 0 :(得分:2)

由于您使用的是Sublime Text查找/替换功能,并且没有涉及编程语言,因此您需要通过两个步骤来实现您的目标。

首先尝试搜索:

(?m)(?:^```\h*\S+\s+\K|\G(?!\A))^(?!```)(.*\R+)(?:```)?

并替换为:

\t\1

Live demo

第二个查找/替换过程将用于添加HTML注释,以便搜索:

(?m)^```\h*(\S+)

并将其替换为:

<!-- language: lang-\1 -->\n

Live demo