javascript - Matcha alla rader som börjar med fyra mellanslag
Jag försöker omsluta alla rader som börjar med 4 mellanslag med pre-taggar. Det här är vad jag har hittills
Text = Text.replace(new RegExp("( {4}.+?)<br />", "g"), "$1\n");
Text = Text.replace(new RegExp("( {4}.+?)\n", "g"), "<pre class=\"brush: js;\">$1</pre>");
Det fungerar men det omsluter varje rad i en pre. Jag behöver att det omsluter hela blocket.
Svar #1
Kanske skulle något som detta fungera? Det matchar flera rader i rad..
( {4}.*(\n {4}.*)*)\n
Svar #2
Behöver du verkligen göra detta med reguljära uttryck? Regexar är häftiga och användbara men de är inte det enda verktyget i din verktygslåda och ibland är det bäst att göra något enkelt och gå vidare till riktiga problem. Jag skulle bara dela upp det i rader och analysera det rad för rad med en ackumulator för de saker som behöver förbehandlas:
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');
Det kanske inte är lika smart som ett obegripligt regex, men åtminstone kommer du att kunna förstå vad det gör sex månader framöver.
http://jsfiddle.net/ambiguous/tFNyv/
