用于将缩进行转换为代码块的正则表达式

时间:2015-08-25 02:22:46

标签: javascript regex

我只是制作一个解析代码块的正则表达式,问题是,有问题!

现在,基本上我的代码块就像SO,4 +空格或1 +标签。问题是,我的正则表达式只抓取代码块的第一行和最后一行:(我不知道为什么。

简单来说,这是我的正则表达式:

/^(?:( {4,}|\t+)(.+))$(?:(?:(?:\n?)( {4,}|\t+)(.+))*)$/

然后我就这样使用它:

    .replace(/^(?:( {4,}|\t+)(.+))$(?:(?:(?:\n?)( {4,}|\t+)(.+))*)$/gmi, function (m, g1, g2, g3, g4) {
        return "<code>" + (g1 + g2) + ("\n" + g3 + g4) + "</code>";
    })

所以我的问题是,如何返回所有行,而不仅仅是第一行\最后一行?

BONUS 有没有办法在代码块中显示之前删除4个空格/ 1标签? :d

修改

我将展示一些不起作用的例子:

使用:

    This is line #1, 4 spaces
    This is line #2, 4 spaces

不起作用:

    This is line #1, 4 spaces
    This is line #2, 4 spaces
    This is line #3, 4 spaces

它的作用是只显示第1行和第3行。

编辑2

如果你需要我的代码的完整上下文,请在这里:

    .replace(/^(?:( {4,}|\t+)(.+))$(?:(?:(?:\n?)( {4,}|\t+)(.+))*)$/gmi, function (m, g1, g2, g3, g4) {
        var marker = '(-{{ +_~ ' + codeblocks.length + ' ~_+ }}-)';
        !g3 ? codeblocks.push(g1 + g2) : codeblocks.push((g1 + g2) + ("\n" + g3 + g4));
        return marker;
    }) //Block

   //Other styling I don't want my code blocks affected by, that's why I hide them first

   .replace(/\(-\{\{ \+_~ ([0-9]*) ~_\+ \}\}-\)/g, function (m, g1) {
        return codeblocks[parseInt(g1, 10)] ? "<code>" + codeblocks[parseInt(g1, 10)] + "</code>" : m;
    }) //Block

0 个答案:

没有答案