匹配所有前缀为四个空格的行

时间:2011-04-30 22:30:44

标签: javascript regex

我正在尝试用pre标记包装所有带有4个空格字符前缀的行。这就是我到目前为止所拥有的

Text = Text.replace(new RegExp("( {4}.+?)<br />", "g"), "$1\n");
Text = Text.replace(new RegExp("( {4}.+?)\n", "g"), "<pre class=\"brush: js;\">$1</pre>");

它有效,但它包裹了pre中的每一行。我需要它来包装整个块。

5 个答案:

答案 0 :(得分:3)

这样的事情可能有用吗?它匹配一行中的多行..

( {4}.*(\n {4}.*)*)\n

答案 1 :(得分:3)

你真的需要用正则表达式做到这一点吗?正则表达式很酷且很有用,但它们并不是工具箱中唯一的工具,有时最好直接做一些事情并继续解决实际问题。我只是将它分成几行并用累加器逐行解析它,以便预先确定事物:

var lines = text.split('\n');
var pre   = [ ];
var out   = [ ];
for(var i = 0; i < lines.length; ++i) {
    if(lines[i].match(/^    /)) {
        pre.push(lines[i]);
    }
    else if(pre.length > 0) {
        out.push('<pre>' + pre.join('\n') + '</pre>' + '\n');
        out.push(lines[i]);
        pre = [ ];
    }
    else {
        out.push(lines[i]);
    }
}
if(pre.length > 0) {
    out.push('<pre>' + pre.join('\n') + '</pre>' + '\n');
}
text = out.join('\n');

这可能不像一个难以理解的正则表达式那么聪明,但至少你能够在六个月后理解它正在做什么。

http://jsfiddle.net/ambiguous/tFNyv/

答案 2 :(得分:1)

请尝试:

Text = Text.replace(new RegExp("(( {4}.+?\n)+)", "g"), "<pre class=\"brush: js;\">$1</pre>");

假设已经完成替换。

适用于:

    lalalal
    noway it's block1
    greetings

    foobar
    block2
    indeed block2

并且产生了,换行符被隐藏:

<pre class="brush: js;">    lalalal
    noway it's block1
    greetings
</pre>
<pre class="brush: js;">    foobar
    block2
    indeed block2
</pre>

答案 3 :(得分:0)

尝试:

$.each(text.split('\n'), function(index, value)
{
    var t = value.replace(/^[\s]{4}(.*)$/, "<pre>$1</pre>");
    $("body").append(t);
});

http://jsfiddle.net/jotapdiez/zx8Pg/

答案 4 :(得分:0)

听起来提问者想要进行降价转换。这个问题类似于这个问题:How do I fix this multiline regular expression in Ruby?。如果想要的效果是模仿降价代码转换,请考虑以下内容(改编自我对红宝石问题的接受答案):

var re = /(\r?\n)((?:(?:\r?\n)+(?:[ ]{4}|\t).*)+\r?\n)(?=\r?\n)/mg;
text = text.replace(re, '$1<pre class="brush: js">$2</pre>');