28. januar 2004 - 09:28Der er
10 kommentarer og 1 løsning
hvordan matcher jeg {0} {1} osv.
Hejsa eksperter (ps: følgende kode er JavaScript, men problemet er med RegExp, derfor denne kategori)
Jeg har en template-streng, som f.eks. kunne se ud som følger var template = "Hejsa {0}, hvordan går det";
Herudover har jeg også en array med navne, som jeg vil hilse, baseret på ovenstående template var navne = new Array(); navne[0] = "Michael"; navne[1] = "Lars"; osv.
Jeg kunne så godt tænke mig at have en funktion som så udskrev Hejsa Michael, hvordan går det Hejsa Lars, hvordan går det
dvs. at {0} bliver erstattet med navnet
Derfor har jeg pt. følgende funktion som ikke virker, da jeg ikke kan finde ud af at matche "{0}" function applyToTemplate (s, arr) { for(i=0;i<arr.length;++i) { alert("searching field #"+i); search = "{["+i+"]}"; var re = new RegExp(search, "gi"); alert(re); s.replace(re, "*"+arr[i]+"*"); } return s; }
kaldt med applyToTemplate(template, navne[0]);
der går et eller andet galt, for den finder ingen "{0}" i template....
Hvad gør jeg galt ?
/Søren
PS: titlen på dette spørgsmål var egenligt Hvordan matcher jeg "{0}", "{1}", ... men åbenbart må man ikke bruge " (eller ...) i spørgsmålstitler, derfor denne barberet version....
<script type="text/javascript"> var template = "Hejsa {0}, hvordan går det"; var navne = new Array(); navne[0] = "Michael"; navne[1] = "Lars";
var reg = /\{\d+\}/g; var num = template.match(reg,"$1"); num = +num[0].substring(1,num[0].length-1); template = template.replace(reg,navne[num]); alert(template); </script>
erik >> dit sidste eksempel spiller bare - super godt ... noget siger mig at jeg skal til at lære hvad de $0 og $1 bruges til :-)))
lægger du et svar...
/* her der den kode, som jeg bruger */ String.prototype.applyToTemplate = function( fields ) { re = /\{(\d+)\}/gi; s = "" + this; s = s.replace(re, function($0,$1) { return fields[$1]; }); return s; }
templateString = "Kære {0},\n Velkommen til {1}...,\n Vi håber De får et godt ophold under deres {2}.\n\n Deres værelsesnummer er {3}.\n\n Med venlig hilsen Personalet..."; fields = new Array(); fields[0] = "Hr. Møller"; fields[1] = "Ydegårds badehotel"; fields[2] = "konference"; fields[3] = "1056"; alert( templateString.applyToTemplate(fields) );
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.