[Javascript] Regex van een url

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Ik ben bezig met een kleine editor die maar bepaalde zaken kan doen en dat on the fly. Nu wil ik een url opvangen en deze converteren naar een <a href=... etc.

code:
1
2
3
4
5
6
7
8
9
10
11
if (tekst.match(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5})[ ]/g)) {
        
   tekst = tekst.replace(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5})/g,"<a href=\"http://$1.$2.$3\">$2</a>");
        
}

if (tekst.match(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5}\/(.*))[ ]/g)) {
        
   tekst = tekst.replace(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5}\/(.*))/g,"<a href=\"http://$1.$2.$3/$4\">$2</a>");
        
}


In bovenstaande code zoekt de replace functie 2 dingen en zet ze om naar goed html. Echter, het werkt niet zoals ik wil.

De functie moet nl. www.testje.nl omzetten naar <a href="http://www.testje.nl">testje</a> en www.testje.nl/directory naar <a href="http://www.testje.nl/directory">testje</a>. Apart werkt het wel maar via het if statement niet... Iemand een idee?

.


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:05
Javascript hoort niet thuis in p&w

-> w&g

https://fgheysels.github.io/


  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Opgelost

code:
1
2
tekst = tekst.replace(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5})[ ]/i,"<a href=\"http://$1.$2.$3\">$2</a>");                        
tekst = tekst.replace(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5})\/(.*)[ ]/i,"<a href=\"http://$1.$2.$3\/$4\">$2</a>");


Was een afsluitend ) vergeten :+

.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:59

crisp

Devver

Pixelated

En in 1 replace:
JavaScript:
1
tekst = tekst.replace(/([a-z]{0,15})\.([a-z\.]{0,100})\.([a-z]{0,5})(\/.*)? /i, '<a href="http://$1.$2.$3$4">$2</a>');

Nog verre van perfect natuurlijk, maar om even aan te geven dat je ook met optionele subpatterns kan werken ;)

Intentionally left blank


  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Het is zeker verre van perfect :+ Vooral omdat het maar éénmaal werkt. Als ik twee keer een linkje invul pakt tie alleen de eerste :( Terug naar de tekentafel.

.


Verwijderd

zet er dan ook een global modifier bij...

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Dank, dank. Ben nog niet helemaal thuis in Javascript zoals je ziet. /i -> /g.

.


Verwijderd

Hint: Zo iets heet een Regular Expression. Google weet meer. ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:59

crisp

Devver

Pixelated

Intentionally left blank


  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Dank dank! Ik ben wel op de hoogte van Regular Expressies, maar niet tot op het bot (om het maar zo te zeggen). En er zijn natuurlijk een miljoen mogelijkheden die je nog niet meteen herkend als je daar niet dagelijks mee in aanraking komt. Daarom nogmaals bedankt.

Vooral Crisp in deze bedankt, die reference probeer ik al een tijdje op te sporen maar ik kom steeds op die oude van netscape terecht. Beter!

[ Voor 22% gewijzigd door Eijkb op 22-01-2006 21:19 ]

.


  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Voor de volledigheid hier het uiteindelijke resultaat, gebruikt in een textarea om van urls automatisch een <A> link te maken.:

code:
1
tekst = tekst.replace(/(?:http:\/\/)?(\w+)\.(\w+)\.(\w+)(\/[\w.?=]+)?/gi,'<a href="http://$1.$2.$3$4" target="_blank">$2</a>');

[ Voor 14% gewijzigd door Eijkb op 23-01-2006 09:19 ]

.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:59

crisp

Devver

Pixelated

Ter info (maar wellicht maakt het je niets uit): IE < 6 ondersteund geen look-behind in reguliere expressies.

Intentionally left blank


  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13-04 09:26
Ik word gestoord van IE :+ Ik ontwikkel alles in FF (mijn primaire browser) en controleer af en toe ofdat het werkt in IE (ik gebruik 6.0.*). En dat is al lastig genoeg. Als ik dan ook nog rekening moet gaan houden met IE < 6.0 dan... eh.. eet ik mijn schoen op. Maar goed, het is een module voor vrienden en kennissen en voor zover ik weet zijn die redelijk up-to-date en anders is updaten geen probleem.

.

Pagina: 1