webForumDet fria alternativet

RegExp alt. Replace

5 svar · 346 visningar · startad av Palle

PalleMedlem sedan apr. 20003 174 inlägg
#1

Gomiddag alles. :bire

Jag är i behov att i en sträng lägga in lite html-taggar på vissa stället, men för mig fungerar det inte alls. :bla

Ett exempel på strängen ser ut som följer:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit
curabitur congue vulputate est
in sed sem in sapien aliquam molestie.

I denna sträng behöver jag nu lägga in <li> och </li> i början och slutet på varje ny rad.. men jag får det bara inte att fungera.

Jag vill alltså att ovanstående omvandlas till:

<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit</li>
<li>curabitur congue vulputate est</li>
<li>in sed sem in sapien aliquam molestie.</li>

Tips, lösningar eller kommentarer på detta? :f

Peter SMedlem sedan dec. 20025 483 inlägg
#2
.replace(/(^|(?:\n|\r){1,2})/g, '$1<li>')
.replace(/((?:\n|\r){1,2}|$)/g, '</li>$1')
PalleMedlem sedan apr. 20003 174 inlägg
#3

Kung! (y)
Tack Peter, fungerar finemang! :f

Dock skulle jag även behöva hjälp med ännu ett pattern. :P

En del data i systemet innehåller content som inte är valid html, så dessa skulle jag behöva rätta till. :)

Ex. så kan en del data se ut så här:

<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit
<li>curabitur congue vulputate est<li>in sed sem in sapien 
aliquam molestie.<li>Morbi elementum velit sed lacus. Cras 
dapibus.<li>Nam arcu. Maecenas leo.
<li>Ut lectus dui, pulvinar sed, faucibus in, tincidunt a, 
mauris.<li>Cum sociis natoque penatibus et magnis dis parturient 
montes, nascetur ridiculus mus.</li>
</ul>

Skulle alltså behöva lägga in de avslutande </li>-taggarna på de ställen där dom saknas.

Idéer om detta? :)

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Testa denna:

.replace(/(<li>(?:[\n\r\w\.,\s]|<\/?(?:p|h[1-6]|[dou]l|pre|div|(?:no)?script|blockquote|form|hr|table|fieldset|address|tt|[abiq]|big|small|em|strong|dfn|code|samp|kbd|var|cite|abbr|acronym|img|object|br|map|su[bp]|span|bdo|input|select|textarea|label|button)>)*)(?=<li>|(?:[\n\r\w\.,\s]|<\/?(?:p|h[1-6]|[dou]l|pre|div|(?:no)?script|blockquote|form|hr|table|fieldset|address|tt|[abiq]|big|small|em|strong|dfn|code|samp|kbd|var|cite|abbr|acronym|img|object|br|map|su[bp]|span|bdo|input|select|textarea|label|button)>)*<\/ul>)/gi,'$1</li>')

Det smyger sig in oönskat whitespace i koden ovan. Fyra stycken bestämt, tror jag det är.

PalleMedlem sedan apr. 20003 174 inlägg
#5

Nice Peter, det fungerar hyggligt bra, dock inte till 100% ännu. ;)

Vissa längre listor innehåller redan xhtml i form av avslutande />, ex. <br />, och då
falerar denna replace.
Har försökt mickla in detta i din snutt - tyvärr utan fungerande resultat. :(

Peter SMedlem sedan dec. 20025 483 inlägg
#6
.replace(/(<li>(?:[\n\r\w\.,\s]|<\/?(?:p|h[1-6]|[dou]l|pre|div|(?:no)?script|blockquote|form|hr|table|fieldset|address|tt|[abiq]|big|small|em|strong|dfn|code|samp|kbd|var|cite|abbr|acronym|img|object|br|map|su[bp]|span|bdo|input|select|textarea|label|button)(?:\s*\/)?>)*)(?=<li>|(?:[\n\r\w\.,\s]|<\/?(?:p|h[1-6]|[dou]l|pre|div|(?:no)?script|blockquote|form|hr|table|fieldset|address|tt|[abiq]|big|small|em|strong|dfn|code|samp|kbd|var|cite|abbr|acronym|img|object|br|map|su[bp]|span|bdo|input|select|textarea|label|button)(?:\s*\/)?>)*<\/ul>)/gi,'$1</li>');

Beware of whitespace...

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)