我只是制作一个解析代码块的正则表达式,问题是,有问题!
现在,基本上我的代码块就像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