Toon posts:

[js] .replace(regexp, ...)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

ik heb een vraag:

ik heb een stukje waar ik gebruik van maak van expressie's:

text = text.replace(new RegExp("www.(.*?).nl", "gi"), "<b/>$1</b>");

als je dus www.iets.nl krijg je iets te zien (dik gedrukt).

Maar nu mijn vraag: Ik wil met $1 nog wat dingen doen.
Ik wil die dus met een functie uitpluizen!

maar

text = text.replace(new RegExp("www.(.*?).nl", "gi"), "<b/>" + testf($1) +</b>");

werkt niet bijv.!
wat wel??

Verwijderd

Ik denk dat je alleen een functie moet geven in het tweede argument van de replace functie.
dus zoiets:
function testf(arg){
return "<b>" +arg+"</b>";
}
text = text.replace(new RegExp("www.(.*?).nl", "gi"), testf($1) );

  • Onno
  • Registratie: Juni 1999
  • Niet online
Verwijderd schreef op 31 May 2003 @ 02:14:
Maar nu mijn vraag: Ik wil met $1 nog wat dingen doen.
Ik wil die dus met een functie uitpluizen!
Met RegExp.exec kun je een array terugkrijgen waarin alle matches zitten. Die kun je vervolgens gebruiken.
"<b/>$1</b>"
Moet dat niet <b>$1</b> zijn? :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

ECMA V3 ondersteund ook het gebruik van een functie als replacement (Pas vanaf IE5.5+ dus - javascript1.5):

JavaScript:
1
text = text.replace(/www.(.*?).nl/gi, function($0,$1) { return '<b>'+$1+'</b>'; });


de argumenten die meegegeven worden zijn altijd eerst de hele match ($0) gevolgd door de matches van de subpatterns.

Intentionally left blank


  • Onno
  • Registratie: Juni 1999
  • Niet online
crisp schreef op 31 mei 2003 @ 13:04:
ECMA V3 ondersteunt ook het gebruik van een functie als replacement (Pas vanaf IE5.5+ dus - javascript1.5)
Dat is nog handiger natuurlijk idd. Volgens de docs werkt het trouwens al vanaf 1.3, wat al door Netscape 4.6 (oid) / Internet Explorer 5.0 ondersteund wordt.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

Onno schreef op 31 May 2003 @ 13:21:
[...]

Dat is nog handiger natuurlijk idd. Volgens de docs werkt het trouwens al vanaf 1.3, wat al door Netscape 4.6 (oid) / Internet Explorer 5.0 ondersteund wordt.
dan ben ik in de war met de look-ahead assertion en de nongreedy modifier.
Dit werkt dus niet in IE5.0: (.*?)
zonder nongreedy modifier krijg je van dit soort ranzige constructies (even \\[b\](.*?)\\[\/b\] als voorbeeld; niet 100% equivalent, maar het gaat om het idee):
JavaScript:
1
text = text.replace(/\\[b\](([^\\[]|\\[\/?([^b]|b[^\]])[^\]]*\])*)\\[\/b\]/gi, '<b>$1</b>');

eigenlijk wil je dan een lookahead assertion gebruiken, maar ja die kent javascript 1.3 ook niet 8)7
:)

ter aanvulling (we zijn nu toch over javascript bezig ;) ); veel mensen weten niet dat de replace method een RegExp object als argument heeft en gebruiken het zo:
JavaScript:
1
text = text.replace(' ', '&nbsp;');

wat doet javascript nu, die neemt het 1e argument, haalt dat door de RegExp constructor, en maakt er dus eigenlijk / / van.
Nu wordt de eerste spatie in text natuurlijk keurig vervangen door &nbsp; maar daarna houdt de matching op omdat de match niet global is (g modifier ontbreekt).

[ Voor 73% gewijzigd door crisp op 31-05-2003 14:06 ]

Intentionally left blank


Verwijderd

offtopic:
hoort javascript niet thuis in /13?

[ Voor 5% gewijzigd door Verwijderd op 31-05-2003 15:30 ]


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Javascript hoort thuis in W&G zoals je duidelijk in onze FAQ kan lezen, dus lees even de FAQ goed door zodat je de volgende keer niet meer dezelfde fout maakt.

Dank U.

Move P&W -> W&G

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1