webForumDet fria alternativet

Skapa stycken och radbrytningar för html

Webbutveckling

6 svar · 470 visningar · startad av Pace

Medlem sedan juni 20019 024 inlägg
Frågan#1

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>

Medlem sedan dec. 20025 483 inlägg
#2

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>
Medlem sedan juni 20019 024 inlägg
#3

Hmm, det fungerar inte riktigt. Strängen som passerar igenom funktionen blir likadan på andra sidan. Alltså ingen förändring. ;)

Medlem sedan dec. 20025 483 inlägg
#4

Kör du ersättningarna i den ordning jag skrev dem?

Jag bifogar ett exempel i JS :)

Medlem sedan juni 20019 024 inlägg
#5

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.

Medlem sedan dec. 20025 483 inlägg
#6

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>.

Medlem sedan juni 20019 024 inlägg
#7

Ah! Jag tackar ödmjukast för hjälpen, Peter! Nu funkar det kanon! :)

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)