[JavaScript] mijn RegExp werkt niet

Pagina: 1
Acties:

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
In een editable divje (IE6) heb ik een soortement tekstverwerker gemaakt. Alles werkt perfect, behalve het importeren van teksten vanuit MS Word (XP). Hierbij staan veel te veel opmaak instructies, want ik wil dat alles aangepast wordt aan de huisstijl van de website (verdana 10pt). Hierbij moeten bestaande marges, fonts etc plaatsmaken voor de huisstijl opmaak. Fontgrootte, fontkleur, tekstopmaak (vet, cursief etc) en achtergrondkleuren mogen wel blijven staan.

Nu heb ik het volgende probleem. Om lege tags te zoeken, gebruik ik de volgende RegExp-expressie:

<("[^"]*"|'[^']*'|[^'">])*>[&nbsp;|\s]*<\/[^>]>

(Deze is gedeeltelijk overgenomen uit "Mastering Regular Expressions 2nd Edition" van O'Reilly.)

Maar ik krijg niet de gewenste output. (Evenals bij andere, theoretisch goede expressies). Ik heb een klein logje gemaakt mbv JS:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Hiero de uitkomsten: 

input: 
<DIV class=article id=article_body>
    U kunt nu het artikel maken door het gewoon hier in te typen
</DIV>
<P></P>
<P>&nbsp;</P>
<P>  </P>

index: 113 
LastIndex: 126 
0: <P>&nbsp;</P>
1: P 

Gegevens van de Regular Expression: 

source: <("[^"]*"|'[^']*'|[^'">])*>[&nbsp;|\s]*<\/[^>]> 
multiline: false 
global: true 
ignoreCase: true


Het is de bedoeling dat ALLE <p>...</p> tags worden gepakt, zodat die later kunnen worden vervangen (tekst is alleen maar om te testen).
Zoals je kunt zien krijg ik echter alleen maar de 2e tag, terwijl (volgens mij) theoretisch gezien alle tags gematched zouden moeten worden.

Weet iemand een oplossing(kje) voor dit probleem?

BVD (nee, geen Margarita-gebeuren ;) )

[ Voor 21% gewijzigd door wizzkizz op 09-08-2003 18:27 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:11

crisp

Devver

Pixelated

code:
1
[&nbsp;|\s]

hier zet je een tekenreeks in een character class; vervang dat eens door:
code:
1
(&nbsp;|\s)*


persoonlijk zou ik gebruik maken van de in javascript 1.5 geintroduceerde non-greedy modifier, en een backreference gebruiken, zoiets dus (niet getest):

code:
1
/<(\w+).*?>(&nbsp;|\s)*<\/\1>/g

[ Voor 14% gewijzigd door crisp op 09-08-2003 18:36 . Reden: f*cking html-rechten... ]

Intentionally left blank


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
Dat van die back-reference is een goed idee. Dat [ |\s] is een foutje, zie de topic zoals die er nu staat.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:11

crisp

Devver

Pixelated

wizzkizz schreef op 09 augustus 2003 @ 18:36:
Dat van die back-reference is een goed idee. Dat [ |\s] is een foutje, zie de topic zoals die er nu staat.
bij mij ook; na een edit wordt het een gewone spatie... :(

Intentionally left blank


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
Helaas, maar jouw oplossing, Crisp, werkt ook niet. Ik krijg precies hetzelfde effect als bij die van mij.

Dat [ of ( maakte qua uitkomst ook niet uit. :'(

[ Voor 6% gewijzigd door wizzkizz op 09-08-2003 19:53 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:11

crisp

Devver

Pixelated

wizzkizz schreef op 09 augustus 2003 @ 19:20:
Helaas, maar jouw oplossing, Crisp, werkt ook niet. Ik krijg precies hetzelfde effect als bij die van mij.

Dat [ of ( maakte qua uitkomst ook niet uit. :'(
werkt bij mij toch prima anders...
testscript

[ Voor 11% gewijzigd door crisp op 09-08-2003 20:53 ]

Intentionally left blank


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
crisp schreef op 09 August 2003 @ 19:51:
[...]

werkt bij mij toch prima anders...
testscript
nog niet geupload?

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
Sorry, er zat (ook) nog een foutje in mijn gebruiken van de RegExp, hoewel de expressie zelf dus wel goed was. In elk geval bedankt, crisp!

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:11

crisp

Devver

Pixelated

nee, typo :) (is mijn eigen server thuis)

Intentionally left blank

Pagina: 1