我正在尝试用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
中的每一行。我需要它来包装整个块。
答案 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');
这可能不像一个难以理解的正则表达式那么聪明,但至少你能够在六个月后理解它正在做什么。
答案 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);
});
答案 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>');