Testa detta:
'för <br />
/([^\r\n]{2}|^)[\r\n]{2}([^\r\n]{2})/[b]g[/b]
'ersättningssträng
$1<br />$2
'för <p></p>
/((?:[^\r\n]|<br \/>)+)/[b]g[/b]
'ersättningssträng
<p>$1</p>
6 svar · 470 visningar · startad av Pace
Jag är ute efter ett tämligen enkelt reguljärt uttryck, att dela upp en sträng i html-stycken och infoga radbrytningar.
Regler:
* Varje stycke ska inneslutas i <p> och </p>.
* Radbrytningar ska ersättas med <br />.
Exempel:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc eu neque feugiat leo ullamcorper sodales. Aenean lacus. Nunc eu eros. Sed ac purus sed mauris malesuada condimentum.
Quisque quam elit, pellentesque a, rhoncus nec, condimentum vel, urna. Morbi metus. Nam tempus. Fusce egestas nonummy eros. Sed pretium augue a erat posuere rutrum. Aenean scelerisque varius sapien.
Nam pellentesque, tellus et vestibulum luctus, odio urna rhoncus elit, eu blandit elit nunc in ante.
Sed est lorem, ultricies et, imperdiet semper, luctus non, lectus. Etiam porttitor scelerisque arcu.
Resultat:
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc eu neque feugiat leo ullamcorper sodales. Aenean lacus. Nunc eu eros. Sed ac purus sed mauris malesuada condimentum.</p>
<p>Quisque quam elit, pellentesque a, rhoncus nec, condimentum vel, urna. Morbi metus. Nam tempus. Fusce egestas nonummy eros. Sed pretium augue a erat posuere rutrum. Aenean scelerisque varius sapien.</p>
<p>Nam pellentesque, tellus et vestibulum luctus, odio urna rhoncus elit, eu blandit elit nunc in ante.<br />
Sed est lorem, ultricies et, imperdiet semper, luctus non, lectus. Etiam porttitor scelerisque arcu.</p>
Testa detta:
'för <br />
/([^\r\n]{2}|^)[\r\n]{2}([^\r\n]{2})/[b]g[/b]
'ersättningssträng
$1<br />$2
'för <p></p>
/((?:[^\r\n]|<br \/>)+)/[b]g[/b]
'ersättningssträng
<p>$1</p>
Hmm, det fungerar inte riktigt. Strängen som passerar igenom funktionen blir likadan på andra sidan. Alltså ingen förändring. ;)
Japp. Fast jag använder visserligen VB.NET om det har någon betydelse? Koden ser ut som följande:
Dim RegExp As RegEx
' För <br />
RegExp = New RegEx("/([^\r\n]{2}|^)[\r\n]{2}([^\r\n]{2})/g", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
Text = RegExp.Replace(Text, "$1<br />$2")
' För <p>...</p>
RegExp = New RegEx("/((?:[^\r\n]|<br \/>)+)/g", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
Text = RegExp.Replace(Text, "<p>$1</p>")
Fast din javascript-variant blir inte riktigt korrekt heller. Stycke nummer två (som börjar med "Quisque quam elit...") blir inget nytt stycke, utan får bara en radbrytning framför.
Ok, efter att ha studerat referensen på MSDN har jag kommit fram till några förändringar:
RegExp = New RegEx("([^\r\n]{2}|^)[\r\n]{2}([^\r\n]{2})", RegexOptions.Compiled)
Text = RegExp.Replace(Text, "$1<br />$2")
' För <p>...</p>
RegExp = New RegEx("((?:[^\r\n]|<br \/>)+)", RegexOptions.Compiled)
Text = RegExp.Replace(Text, "<p>$1</p>")
Om JS-exemplet: för mig blir det andra stycket omslutet av <p></p>.
Ah! Jag tackar ödmjukast för hjälpen, Peter! Nu funkar det kanon! :)